Skip to content

Commit f3b8dd8

Browse files
committed
Make the severity of diagnostics configurable
It is useful to prevent false positives (temporarily)
1 parent 1a933d6 commit f3b8dd8

4 files changed

Lines changed: 21 additions & 25 deletions

File tree

lib/typeprof/diagnostic.rb

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
module TypeProf
22
class Diagnostic
3-
def initialize(node, meth, msg, severity: :error, tags: nil)
3+
def initialize(node, meth, msg, tags: nil)
44
@node = node
55
@meth = meth
66
@msg = msg
7-
@severity = severity
87
@tags = tags
98
end
109

1110
def reuse(new_node)
1211
@node = new_node
1312
end
1413

15-
attr_reader :msg, :severity, :tags
14+
attr_reader :msg, :tags
1615

1716
def code_range
1817
@node.send(@meth)
@@ -21,13 +20,13 @@ def code_range
2120
SEVERITY = { error: 1, warning: 2, info: 3, hint: 4 }
2221
TAG = { unnecessary: 1, deprecated: 2 }
2322

24-
def to_lsp
23+
def to_lsp(severity: :error)
2524
json = {
2625
range: code_range.to_lsp,
2726
source: "TypeProf",
2827
message: @msg,
2928
}
30-
json[:severity] = SEVERITY[@severity] if @severity
29+
json[:severity] = SEVERITY[severity]
3130
json[:tags] = @tags.map {|tag| TAG[tag] } if @tags
3231
json
3332
end

lib/typeprof/lsp/server.rb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ def initialize(core, reader, writer, url_schema: nil, publish_all_diagnostics: f
5757
@signature_enabled = true
5858
@url_schema = url_schema || (File::ALT_SEPARATOR != "\\" ? "file://" : "file:///")
5959
@publish_all_diagnostics = publish_all_diagnostics # TODO: implement more dedicated publish feature
60+
@diagnostic_severity = :error
6061
end
6162

6263
attr_reader :core, :open_texts
@@ -77,6 +78,15 @@ def add_workspaces(folders)
7778
conf = TypeProf::LSP.load_json_with_comments(conf_path, symbolize_names: true)
7879
if conf
7980
if conf[:typeprof_version] == "experimental"
81+
if conf[:diagnostic_severity]
82+
severity = conf[:diagnostic_severity].to_sym
83+
case severity
84+
when :error, :warning, :info, :hint
85+
@diagnostic_severity = severity
86+
else
87+
puts "unknown severity: #{ severity }"
88+
end
89+
end
8090
if conf[:analysis_unit_dirs].size >= 2
8191
puts "currently analysis_unit_dirs can have only one directory"
8292
end
@@ -152,7 +162,7 @@ def publish_diagnostics(uri)
152162
diags = []
153163
if text
154164
@core.diagnostics(text.path) do |diag|
155-
diags << diag.to_lsp
165+
diags << diag.to_lsp(severity: @diagnostic_severity)
156166
end
157167
end
158168
send_notification(

test/diagnostic_test.rb

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,9 @@ def code_range
88
end
99
end
1010

11-
def test_diagnostic_with_default_values
11+
def test_diagnostic
1212
diag = Diagnostic.new(DummyNode.new, :code_range, "test message")
13-
assert_equal :error, diag.severity
1413
assert_nil diag.tags
1514
end
16-
17-
def test_diagnostic_with_custom_severity
18-
diag = Diagnostic.new(DummyNode.new, :code_range, "test message", severity: :warning)
19-
assert_equal :warning, diag.severity
20-
end
21-
22-
def test_diagnostic_with_custom_tags
23-
diag = Diagnostic.new(DummyNode.new, :code_range, "test message", tags: [:deprecated])
24-
assert_equal [:deprecated], diag.tags
25-
end
26-
27-
def test_diagnostic_with_custom_severity_and_tags
28-
diag = Diagnostic.new(DummyNode.new, :code_range, "test message", severity: :info, tags: [:experimental])
29-
assert_equal :info, diag.severity
30-
assert_equal [:experimental], diag.tags
31-
end
3215
end
3316
end

typeprof.conf.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,9 @@
1515
"analysis_unit_dirs": [
1616
"lib/typeprof/core/",
1717
// "lib/typeprof/lsp",
18-
]
18+
],
19+
20+
// Severity of diagnosis, selectable from "error", "warning", "info", "hint", and "none".
21+
// Currently, TypeProf reports many false positives, so it is recommended to use "hint" or "none".
22+
"diagnostic_severity": "info"
1923
}

0 commit comments

Comments
 (0)