From 14d2de4e373f00d48be5cf5b0d7d016bc7f8a839 Mon Sep 17 00:00:00 2001 From: Georgy Dyuldin Date: Mon, 6 Feb 2017 10:43:23 +0300 Subject: [PATCH] Add parsing severity level for flake8 and pep8 linters --- src/client/linters/flake8.ts | 17 ++++++++++++++-- src/client/linters/pep8Linter.ts | 16 +++++++++++++-- src/test/extension.lint.test.ts | 34 ++++++++++++++++---------------- 3 files changed, 46 insertions(+), 21 deletions(-) diff --git a/src/client/linters/flake8.ts b/src/client/linters/flake8.ts index bd2e226ae619..63db4600726a 100644 --- a/src/client/linters/flake8.ts +++ b/src/client/linters/flake8.ts @@ -10,6 +10,20 @@ export class Linter extends baseLinter.BaseLinter { super('flake8', Product.flake8, outputChannel, workspaceRootPath); } + private parseMessagesCodeSeverity(error: string): baseLinter.LintMessageSeverity { + + let category_letter = error[0]; + switch (category_letter) { + case 'F': + case 'E': + return baseLinter.LintMessageSeverity.Error; + case 'W': + return baseLinter.LintMessageSeverity.Warning; + default: + return baseLinter.LintMessageSeverity.Information; + } + } + public isEnabled(): Boolean { return this.pythonSettings.linting.flake8Enabled; } @@ -22,9 +36,8 @@ export class Linter extends baseLinter.BaseLinter { let flake8Args = Array.isArray(this.pythonSettings.linting.flake8Args) ? this.pythonSettings.linting.flake8Args : []; return new Promise((resolve, reject) => { this.run(flake8Path, flake8Args.concat(['--format=%(row)d,%(col)d,%(code)s,%(code)s:%(text)s', document.uri.fsPath]), document, this.workspaceRootPath).then(messages => { - // All messages in pep8 are treated as warnings for now messages.forEach(msg => { - msg.severity = baseLinter.LintMessageSeverity.Information; + msg.severity = this.parseMessagesCodeSeverity(msg.type); }); resolve(messages); diff --git a/src/client/linters/pep8Linter.ts b/src/client/linters/pep8Linter.ts index b9e332fe9da5..128882fe0a33 100644 --- a/src/client/linters/pep8Linter.ts +++ b/src/client/linters/pep8Linter.ts @@ -10,6 +10,19 @@ export class Linter extends baseLinter.BaseLinter { super('pep8', Product.pep8, outputChannel, workspaceRootPath); } + private parseMessagesCodeSeverity(error: string): baseLinter.LintMessageSeverity { + + let category_letter = error[0]; + switch (category_letter) { + case 'E': + return baseLinter.LintMessageSeverity.Error; + case 'W': + return baseLinter.LintMessageSeverity.Warning; + default: + return baseLinter.LintMessageSeverity.Information; + } + } + public isEnabled(): Boolean { return this.pythonSettings.linting.pep8Enabled; } @@ -22,9 +35,8 @@ export class Linter extends baseLinter.BaseLinter { let pep8Args = Array.isArray(this.pythonSettings.linting.pep8Args) ? this.pythonSettings.linting.pep8Args : []; return new Promise(resolve => { this.run(pep8Path, pep8Args.concat(['--format=%(row)d,%(col)d,%(code)s,%(code)s:%(text)s', document.uri.fsPath]), document, this.workspaceRootPath).then(messages => { - // All messages in pep8 are treated as warnings for now messages.forEach(msg => { - msg.severity = baseLinter.LintMessageSeverity.Information; + msg.severity = this.parseMessagesCodeSeverity(msg.type); }); resolve(messages); diff --git a/src/test/extension.lint.test.ts b/src/test/extension.lint.test.ts index e1d8991ae8e8..0a7ecac2990c 100644 --- a/src/test/extension.lint.test.ts +++ b/src/test/extension.lint.test.ts @@ -74,22 +74,22 @@ let pyLint3MessagesToBeReturned: baseLinter.ILintMessage[] = [ { line: 13, column: 0, severity: baseLinter.LintMessageSeverity.Error, code: 'E0001', message: 'Missing parentheses in call to \'print\'', possibleWord: '', provider: '', type: '' } ]; let flake8MessagesToBeReturned: baseLinter.ILintMessage[] = [ - { line: 5, column: 1, severity: baseLinter.LintMessageSeverity.Information, code: 'E302', message: 'expected 2 blank lines, found 1', possibleWord: '', provider: '', type: '' }, - { line: 19, column: 15, severity: baseLinter.LintMessageSeverity.Information, code: 'E127', message: 'continuation line over-indented for visual indent', possibleWord: '', provider: '', type: '' }, - { line: 24, column: 23, severity: baseLinter.LintMessageSeverity.Information, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' }, - { line: 62, column: 30, severity: baseLinter.LintMessageSeverity.Information, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' }, - { line: 70, column: 22, severity: baseLinter.LintMessageSeverity.Information, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' }, - { line: 80, column: 5, severity: baseLinter.LintMessageSeverity.Information, code: 'E303', message: 'too many blank lines (2)', possibleWord: '', provider: '', type: '' }, - { line: 87, column: 24, severity: baseLinter.LintMessageSeverity.Information, code: 'W292', message: 'no newline at end of file', possibleWord: '', provider: '', type: '' } + { line: 5, column: 1, severity: baseLinter.LintMessageSeverity.Error, code: 'E302', message: 'expected 2 blank lines, found 1', possibleWord: '', provider: '', type: '' }, + { line: 19, column: 15, severity: baseLinter.LintMessageSeverity.Error, code: 'E127', message: 'continuation line over-indented for visual indent', possibleWord: '', provider: '', type: '' }, + { line: 24, column: 23, severity: baseLinter.LintMessageSeverity.Error, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' }, + { line: 62, column: 30, severity: baseLinter.LintMessageSeverity.Error, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' }, + { line: 70, column: 22, severity: baseLinter.LintMessageSeverity.Error, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' }, + { line: 80, column: 5, severity: baseLinter.LintMessageSeverity.Error, code: 'E303', message: 'too many blank lines (2)', possibleWord: '', provider: '', type: '' }, + { line: 87, column: 24, severity: baseLinter.LintMessageSeverity.Warning, code: 'W292', message: 'no newline at end of file', possibleWord: '', provider: '', type: '' } ]; let pep8MessagesToBeReturned: baseLinter.ILintMessage[] = [ - { line: 5, column: 1, severity: baseLinter.LintMessageSeverity.Information, code: 'E302', message: 'expected 2 blank lines, found 1', possibleWord: '', provider: '', type: '' }, - { line: 19, column: 15, severity: baseLinter.LintMessageSeverity.Information, code: 'E127', message: 'continuation line over-indented for visual indent', possibleWord: '', provider: '', type: '' }, - { line: 24, column: 23, severity: baseLinter.LintMessageSeverity.Information, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' }, - { line: 62, column: 30, severity: baseLinter.LintMessageSeverity.Information, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' }, - { line: 70, column: 22, severity: baseLinter.LintMessageSeverity.Information, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' }, - { line: 80, column: 5, severity: baseLinter.LintMessageSeverity.Information, code: 'E303', message: 'too many blank lines (2)', possibleWord: '', provider: '', type: '' }, - { line: 87, column: 24, severity: baseLinter.LintMessageSeverity.Information, code: 'W292', message: 'no newline at end of file', possibleWord: '', provider: '', type: '' } + { line: 5, column: 1, severity: baseLinter.LintMessageSeverity.Error, code: 'E302', message: 'expected 2 blank lines, found 1', possibleWord: '', provider: '', type: '' }, + { line: 19, column: 15, severity: baseLinter.LintMessageSeverity.Error, code: 'E127', message: 'continuation line over-indented for visual indent', possibleWord: '', provider: '', type: '' }, + { line: 24, column: 23, severity: baseLinter.LintMessageSeverity.Error, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' }, + { line: 62, column: 30, severity: baseLinter.LintMessageSeverity.Error, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' }, + { line: 70, column: 22, severity: baseLinter.LintMessageSeverity.Error, code: 'E261', message: 'at least two spaces before inline comment', possibleWord: '', provider: '', type: '' }, + { line: 80, column: 5, severity: baseLinter.LintMessageSeverity.Error, code: 'E303', message: 'too many blank lines (2)', possibleWord: '', provider: '', type: '' }, + { line: 87, column: 24, severity: baseLinter.LintMessageSeverity.Warning, code: 'W292', message: 'no newline at end of file', possibleWord: '', provider: '', type: '' } ]; let pydocstyleMessagseToBeReturned: baseLinter.ILintMessage[] = [ { '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[] = [ let filteredPylint3MessagesToBeReturned: baseLinter.ILintMessage[] = [ ]; let filteredFlake8MessagesToBeReturned: baseLinter.ILintMessage[] = [ - { line: 87, column: 24, severity: baseLinter.LintMessageSeverity.Information, code: 'W292', message: 'no newline at end of file', possibleWord: '', provider: '', type: '' } + { line: 87, column: 24, severity: baseLinter.LintMessageSeverity.Warning, code: 'W292', message: 'no newline at end of file', possibleWord: '', provider: '', type: '' } ]; let filteredPep88MessagesToBeReturned: baseLinter.ILintMessage[] = [ - { line: 87, column: 24, severity: baseLinter.LintMessageSeverity.Information, code: 'W292', message: 'no newline at end of file', possibleWord: '', provider: '', type: '' } + { line: 87, column: 24, severity: baseLinter.LintMessageSeverity.Warning, code: 'W292', message: 'no newline at end of file', possibleWord: '', provider: '', type: '' } ]; let fiteredPydocstyleMessagseToBeReturned: baseLinter.ILintMessage[] = [ { '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', () => { let linter = new pydocstyle.Linter(ch, pydocstyleConfigPath); return testLinterMessages(linter, ch, path.join(pydocstyleConfigPath, 'file.py'), fiteredPydocstyleMessagseToBeReturned).then(done, done); }); -}); \ No newline at end of file +});