Skip to content

Commit 4fb8e3d

Browse files
gdyuldinDonJayamanne
authored andcommitted
Add parsing severity level for flake8 and pep8 linters (DonJayamanne#709)
1 parent 70abdf7 commit 4fb8e3d

File tree

3 files changed

+46
-21
lines changed

3 files changed

+46
-21
lines changed

src/client/linters/flake8.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,20 @@ export class Linter extends baseLinter.BaseLinter {
1010
super('flake8', Product.flake8, outputChannel, workspaceRootPath);
1111
}
1212

13+
private parseMessagesCodeSeverity(error: string): baseLinter.LintMessageSeverity {
14+
15+
let category_letter = error[0];
16+
switch (category_letter) {
17+
case 'F':
18+
case 'E':
19+
return baseLinter.LintMessageSeverity.Error;
20+
case 'W':
21+
return baseLinter.LintMessageSeverity.Warning;
22+
default:
23+
return baseLinter.LintMessageSeverity.Information;
24+
}
25+
}
26+
1327
public isEnabled(): Boolean {
1428
return this.pythonSettings.linting.flake8Enabled;
1529
}
@@ -22,9 +36,8 @@ export class Linter extends baseLinter.BaseLinter {
2236
let flake8Args = Array.isArray(this.pythonSettings.linting.flake8Args) ? this.pythonSettings.linting.flake8Args : [];
2337
return new Promise<baseLinter.ILintMessage[]>((resolve, reject) => {
2438
this.run(flake8Path, flake8Args.concat(['--format=%(row)d,%(col)d,%(code)s,%(code)s:%(text)s', document.uri.fsPath]), document, this.workspaceRootPath).then(messages => {
25-
// All messages in pep8 are treated as warnings for now
2639
messages.forEach(msg => {
27-
msg.severity = baseLinter.LintMessageSeverity.Information;
40+
msg.severity = this.parseMessagesCodeSeverity(msg.type);
2841
});
2942

3043
resolve(messages);

src/client/linters/pep8Linter.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,19 @@ export class Linter extends baseLinter.BaseLinter {
1010
super('pep8', Product.pep8, outputChannel, workspaceRootPath);
1111
}
1212

13+
private parseMessagesCodeSeverity(error: string): baseLinter.LintMessageSeverity {
14+
15+
let category_letter = error[0];
16+
switch (category_letter) {
17+
case 'E':
18+
return baseLinter.LintMessageSeverity.Error;
19+
case 'W':
20+
return baseLinter.LintMessageSeverity.Warning;
21+
default:
22+
return baseLinter.LintMessageSeverity.Information;
23+
}
24+
}
25+
1326
public isEnabled(): Boolean {
1427
return this.pythonSettings.linting.pep8Enabled;
1528
}
@@ -22,9 +35,8 @@ export class Linter extends baseLinter.BaseLinter {
2235
let pep8Args = Array.isArray(this.pythonSettings.linting.pep8Args) ? this.pythonSettings.linting.pep8Args : [];
2336
return new Promise<baseLinter.ILintMessage[]>(resolve => {
2437
this.run(pep8Path, pep8Args.concat(['--format=%(row)d,%(col)d,%(code)s,%(code)s:%(text)s', document.uri.fsPath]), document, this.workspaceRootPath).then(messages => {
25-
// All messages in pep8 are treated as warnings for now
2638
messages.forEach(msg => {
27-
msg.severity = baseLinter.LintMessageSeverity.Information;
39+
msg.severity = this.parseMessagesCodeSeverity(msg.type);
2840
});
2941

3042
resolve(messages);

src/test/extension.lint.test.ts

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -74,22 +74,22 @@ let pyLint3MessagesToBeReturned: baseLinter.ILintMessage[] = [
7474
{ line: 13, column: 0, severity: baseLinter.LintMessageSeverity.Error, code: 'E0001', message: 'Missing parentheses in call to \'print\'', possibleWord: '', provider: '', type: '' }
7575
];
7676
let flake8MessagesToBeReturned: baseLinter.ILintMessage[] = [
77-
{ line: 5, column: 1, severity: baseLinter.LintMessageSeverity.Information, code: 'E302', message: 'expected 2 blank lines, found 1', possibleWord: '', provider: '', type: '' },
78-
{ line: 19, column: 15, severity: baseLinter.LintMessageSeverity.Information, code: 'E127', message: 'continuation line over-indented for visual indent', possibleWord: '', provider: '', type: '' },
79-
{ line: 24, column: 23, severity: baseLinter.LintMessageSeverity.Information, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' },
80-
{ line: 62, column: 30, severity: baseLinter.LintMessageSeverity.Information, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' },
81-
{ line: 70, column: 22, severity: baseLinter.LintMessageSeverity.Information, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' },
82-
{ line: 80, column: 5, severity: baseLinter.LintMessageSeverity.Information, code: 'E303', message: 'too many blank lines (2)', possibleWord: '', provider: '', type: '' },
83-
{ line: 87, column: 24, severity: baseLinter.LintMessageSeverity.Information, code: 'W292', message: 'no newline at end of file', possibleWord: '', provider: '', type: '' }
77+
{ line: 5, column: 1, severity: baseLinter.LintMessageSeverity.Error, code: 'E302', message: 'expected 2 blank lines, found 1', possibleWord: '', provider: '', type: '' },
78+
{ line: 19, column: 15, severity: baseLinter.LintMessageSeverity.Error, code: 'E127', message: 'continuation line over-indented for visual indent', possibleWord: '', provider: '', type: '' },
79+
{ line: 24, column: 23, severity: baseLinter.LintMessageSeverity.Error, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' },
80+
{ line: 62, column: 30, severity: baseLinter.LintMessageSeverity.Error, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' },
81+
{ line: 70, column: 22, severity: baseLinter.LintMessageSeverity.Error, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' },
82+
{ line: 80, column: 5, severity: baseLinter.LintMessageSeverity.Error, code: 'E303', message: 'too many blank lines (2)', possibleWord: '', provider: '', type: '' },
83+
{ line: 87, column: 24, severity: baseLinter.LintMessageSeverity.Warning, code: 'W292', message: 'no newline at end of file', possibleWord: '', provider: '', type: '' }
8484
];
8585
let pep8MessagesToBeReturned: baseLinter.ILintMessage[] = [
86-
{ line: 5, column: 1, severity: baseLinter.LintMessageSeverity.Information, code: 'E302', message: 'expected 2 blank lines, found 1', possibleWord: '', provider: '', type: '' },
87-
{ line: 19, column: 15, severity: baseLinter.LintMessageSeverity.Information, code: 'E127', message: 'continuation line over-indented for visual indent', possibleWord: '', provider: '', type: '' },
88-
{ line: 24, column: 23, severity: baseLinter.LintMessageSeverity.Information, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' },
89-
{ line: 62, column: 30, severity: baseLinter.LintMessageSeverity.Information, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' },
90-
{ line: 70, column: 22, severity: baseLinter.LintMessageSeverity.Information, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' },
91-
{ line: 80, column: 5, severity: baseLinter.LintMessageSeverity.Information, code: 'E303', message: 'too many blank lines (2)', possibleWord: '', provider: '', type: '' },
92-
{ line: 87, column: 24, severity: baseLinter.LintMessageSeverity.Information, code: 'W292', message: 'no newline at end of file', possibleWord: '', provider: '', type: '' }
86+
{ line: 5, column: 1, severity: baseLinter.LintMessageSeverity.Error, code: 'E302', message: 'expected 2 blank lines, found 1', possibleWord: '', provider: '', type: '' },
87+
{ line: 19, column: 15, severity: baseLinter.LintMessageSeverity.Error, code: 'E127', message: 'continuation line over-indented for visual indent', possibleWord: '', provider: '', type: '' },
88+
{ line: 24, column: 23, severity: baseLinter.LintMessageSeverity.Error, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' },
89+
{ line: 62, column: 30, severity: baseLinter.LintMessageSeverity.Error, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' },
90+
{ line: 70, column: 22, severity: baseLinter.LintMessageSeverity.Error, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' },
91+
{ line: 80, column: 5, severity: baseLinter.LintMessageSeverity.Error, code: 'E303', message: 'too many blank lines (2)', possibleWord: '', provider: '', type: '' },
92+
{ line: 87, column: 24, severity: baseLinter.LintMessageSeverity.Warning, code: 'W292', message: 'no newline at end of file', possibleWord: '', provider: '', type: '' }
9393
];
9494
let pydocstyleMessagseToBeReturned: baseLinter.ILintMessage[] = [
9595
{ 'code': 'D400', severity: baseLinter.LintMessageSeverity.Information, 'message': 'First line should end with a period (not \'e\')', 'column': 0, 'line': 1, 'type': '', 'provider': 'pydocstyle' },
@@ -127,10 +127,10 @@ let filteredPylintMessagesToBeReturned: baseLinter.ILintMessage[] = [
127127
let filteredPylint3MessagesToBeReturned: baseLinter.ILintMessage[] = [
128128
];
129129
let filteredFlake8MessagesToBeReturned: baseLinter.ILintMessage[] = [
130-
{ line: 87, column: 24, severity: baseLinter.LintMessageSeverity.Information, code: 'W292', message: 'no newline at end of file', possibleWord: '', provider: '', type: '' }
130+
{ line: 87, column: 24, severity: baseLinter.LintMessageSeverity.Warning, code: 'W292', message: 'no newline at end of file', possibleWord: '', provider: '', type: '' }
131131
];
132132
let filteredPep88MessagesToBeReturned: baseLinter.ILintMessage[] = [
133-
{ line: 87, column: 24, severity: baseLinter.LintMessageSeverity.Information, code: 'W292', message: 'no newline at end of file', possibleWord: '', provider: '', type: '' }
133+
{ line: 87, column: 24, severity: baseLinter.LintMessageSeverity.Warning, code: 'W292', message: 'no newline at end of file', possibleWord: '', provider: '', type: '' }
134134
];
135135
let fiteredPydocstyleMessagseToBeReturned: baseLinter.ILintMessage[] = [
136136
{ 'code': 'D102', severity: baseLinter.LintMessageSeverity.Information, 'message': 'Missing docstring in public method', 'column': 4, 'line': 8, 'type': '', 'provider': 'pydocstyle' }
@@ -261,4 +261,4 @@ suite('Linting', () => {
261261
let linter = new pydocstyle.Linter(ch, pydocstyleConfigPath);
262262
return testLinterMessages(linter, ch, path.join(pydocstyleConfigPath, 'file.py'), fiteredPydocstyleMessagseToBeReturned).then(done, done);
263263
});
264-
});
264+
});

0 commit comments

Comments
 (0)