Skip to content
This repository was archived by the owner on Aug 7, 2023. It is now read-only.

Commit 5b106f8

Browse files
authored
Merge pull request #143 from AtomLinter/arcanemagus/linter-v2
Update to Linter v2
2 parents 9afc26e + 2391e38 commit 5b106f8

File tree

5 files changed

+78
-48
lines changed

5 files changed

+78
-48
lines changed

lib/init.coffee

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ module.exports =
7575
activate: ->
7676
require('atom-package-deps').install 'linter-rust'
7777

78-
7978
provideLinter: ->
8079
LinterRust = require('./linter-rust')
8180
@provider = new LinterRust()
@@ -84,5 +83,5 @@ module.exports =
8483
grammarScopes: ['source.rust']
8584
scope: 'project'
8685
lint: @provider.lint
87-
lintOnFly: false
86+
lintsOnChange: false
8887
}

lib/linter-rust.coffee

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,8 @@ class LinterRust
115115

116116
# correct file paths
117117
messages.forEach (message) ->
118-
if !(path.isAbsolute message.filePath)
119-
message.filePath = path.join curDir, message.filePath
118+
if !(path.isAbsolute message.location.file)
119+
message.file = path.join curDir, message.file
120120
messages
121121
else
122122
# whoops, we're in trouble -- let's output as much as we can
@@ -196,7 +196,6 @@ class LinterRust
196196
@cachedErrorMode = result
197197
result
198198

199-
200199
locateCargo: (curDir) =>
201200
root_dir = if /^win/.test process.platform then /^.:\\$/ else /^\/$/
202201
directory = path.resolve curDir

lib/mode.coffee

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ parseJsonMessages = (messages, {disabledWarnings}) ->
5353
for span in input.spans
5454
unless span.is_primary
5555
element.children.push
56-
message: span.label
5756
range: [
5857
[span.line_start - 1, span.column_start - 1],
5958
[span.line_end - 1, span.column_end - 1]
@@ -81,12 +80,10 @@ buildMessages = (elements, disabledWarnings) ->
8180
when 'info', 'trace', 'note'
8281
# Add only if there is a last message
8382
if lastMessage
84-
lastMessage.trace or= []
85-
lastMessage.trace.push
86-
type: "Trace"
87-
text: element.message
88-
filePath: element.file
89-
range: element.range
83+
lastMessage.reference = {
84+
file: element.file
85+
position: element.range
86+
}
9087
when 'warning'
9188
# If the message is warning and user enabled disabling warnings
9289
# Check if this warning is disabled
@@ -111,19 +108,22 @@ buildMessages = (elements, disabledWarnings) ->
111108

112109
constructMessage = (type, element) ->
113110
message =
114-
type: type
115-
text: element.message
116-
filePath: element.file
117-
range: element.range
111+
severity: type.toLowerCase()
112+
excerpt: element.message
113+
location: {
114+
file: element.file
115+
position: element.range
116+
}
118117
# children exists only in JSON messages
119118
if element.children
120-
message.trace = []
121119
for children in element.children
122-
message.trace.push
123-
type: "Trace"
124-
text: children.message
125-
filePath: element.file
126-
range: children.range or element.range
120+
if children.range
121+
# NOTE: Will only save the first valid reference
122+
message.reference = {
123+
file: element.file
124+
position: children.range
125+
}
126+
break
127127
message
128128

129129
buildRustcArguments = (linter, paths) ->

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,18 @@
1414
"providedServices": {
1515
"linter": {
1616
"versions": {
17-
"1.0.0": "provideLinter"
17+
"2.0.0": "provideLinter"
1818
}
1919
}
2020
},
2121
"dependencies": {
2222
"atom-linter": "^10.0.0",
23-
"atom-package-deps": "^4.3.1",
23+
"atom-package-deps": "^5.0.0",
2424
"semver": "^5.3.0",
2525
"xregexp": "^4.1.1"
2626
},
2727
"package-deps": [
28-
"linter",
28+
"linter:2.0.0",
2929
"language-rust"
3030
]
3131
}

spec/parse-spec.coffee

Lines changed: 55 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,21 @@ describe "errorModes::OLD_RUSTC::parse", ->
1010
it "should properly parse one line error message", ->
1111
expect(errorModes.OLD_RUSTC.parse('my/awesome file.rs:1:2: 3:4 error: my awesome text\n', {}))
1212
.toEqual([{
13-
type: 'Error'
14-
text: 'my awesome text'
15-
filePath: 'my/awesome file.rs'
16-
range: [[0, 1], [2, 3]]
13+
severity: 'error'
14+
excerpt: 'my awesome text'
15+
location:
16+
file: 'my/awesome file.rs'
17+
position: [[0, 1], [2, 3]]
1718
}])
1819

1920
it "should properly parse one line warning message", ->
2021
expect(errorModes.OLD_RUSTC.parse('foo:33:44: 22:33 warning: äüö<>\n', {}))
2122
.toEqual([{
22-
type: 'Warning',
23-
text: 'äüö<>'
24-
filePath: 'foo'
25-
range: [[32, 43], [21, 32]]
23+
severity: 'warning',
24+
excerpt: 'äüö<>'
25+
location:
26+
file: 'foo'
27+
position: [[32, 43], [21, 32]]
2628
}])
2729

2830
it "should return messages with a range of at least one character", ->
@@ -31,47 +33,77 @@ describe "errorModes::OLD_RUSTC::parse", ->
3133
# expect(editor.getPath()).toContain 'c.coffee'
3234
expect(errorModes.OLD_RUSTC.parse('foo:1:1: 1:1 error: text\n', {textEditor: editor}))
3335
.toEqual([{
34-
type: 'Error'
35-
text: 'text'
36-
filePath: 'foo'
37-
range: [[0, 0], [0, 2]]
36+
severity: 'error'
37+
excerpt: 'text'
38+
location:
39+
file: 'foo'
40+
position: [[0, 0], [0, 2]]
3841
}])
3942
expect(errorModes.OLD_RUSTC.parse('foo:2:1: 2:1 error: text\n', {textEditor: editor}))
4043
.toEqual([{
41-
type: 'Error'
42-
text: 'text'
43-
filePath: 'foo'
44-
range: [[1, 0], [1, 7]]
44+
severity: 'error'
45+
excerpt: 'text'
46+
location:
47+
file: 'foo'
48+
position: [[1, 0], [1, 7]]
4549
}])
4650

4751
it "should properly parse multiline messages", ->
4852
expect(errorModes.OLD_RUSTC.parse('bar:1:2: 3:4 error: line one\n\
4953
two\n', {}))
5054
.toEqual([
51-
{ type: 'Error', text: 'line one\ntwo', filePath: 'bar', range: [[0, 1], [2, 3]] }
55+
{
56+
severity: 'error',
57+
excerpt: 'line one\ntwo',
58+
location: {
59+
file: 'bar',
60+
position: [[0, 1], [2, 3]]
61+
}
62+
}
5263
])
5364
expect(errorModes.OLD_RUSTC.parse('bar:1:2: 3:4 error: line one\n\
5465
two\n\
5566
foo:1:1: 1:2 warning: simple line\n', {}))
5667
.toEqual([
57-
{ type: 'Error', text: 'line one\ntwo', filePath: 'bar', range: [[0, 1], [2, 3]] },
58-
{ type: 'Warning', text: 'simple line', filePath: 'foo', range: [[0, 0], [0, 1]] }
68+
{
69+
severity: 'error',
70+
excerpt: 'line one\ntwo',
71+
location: {
72+
file: 'bar',
73+
position: [[0, 1], [2, 3]]
74+
}
75+
},
76+
{
77+
severity: 'warning',
78+
excerpt: 'simple line',
79+
location: {
80+
file: 'foo',
81+
position: [[0, 0], [0, 1]]
82+
}
83+
}
5984
])
6085
expect(errorModes.OLD_RUSTC.parse('bar:1:2: 3:4 error: line one\n\
6186
two\n\
6287
three\n\
6388
foo:1 shouldnt match', {}))
6489
.toEqual([
65-
{ type: 'Error', text: 'line one\ntwo\nthree', filePath: 'bar', range: [[0, 1], [2, 3]] }
90+
{
91+
severity: 'error',
92+
excerpt: 'line one\ntwo\nthree',
93+
location: {
94+
file: 'bar',
95+
position: [[0, 1], [2, 3]]
96+
}
97+
}
6698
])
6799

68100
it "should also cope with windows line breaks", ->
69-
expect(errorModes.OLD_RUSTC.parse('a:1:2: 3:4 error: a\r\nb\n', {})[0].text)
101+
expect(errorModes.OLD_RUSTC.parse('a:1:2: 3:4 error: a\r\nb\n', {})[0].excerpt)
70102
.toEqual('a\r\nb')
71103

72104
multi = errorModes.OLD_RUSTC.parse('a:1:2: 3:4 error: a\n\rb\n\rx:1:2: 3:4 error: asd\r\n', {})
73-
expect(multi[0].text).toEqual('a\n\rb')
74-
expect(multi[1].text).toEqual('asd')
105+
expect(multi[0].excerpt).toEqual('a\n\rb')
106+
expect(multi[1].excerpt).toEqual('asd')
75107

76108
it "should not throw an error with extra whitespace in paths", ->
77109
buildLinterWithWhitespacePath = () ->

0 commit comments

Comments
 (0)