From 084c7542a45e6d462941b8ab3587234ac6afea72 Mon Sep 17 00:00:00 2001 From: Kim-Adeline Miguel Date: Thu, 9 Jan 2020 16:18:03 -0800 Subject: [PATCH 1/3] Revert "fix(client/linters/mypy): call mypy incorrectly (#5834)" This reverts commit 1b6fbfba8149ea78244cecbb80fa203b10a1f5a5. --- src/client/linters/mypy.ts | 5 +- src/test/linters/mypy.unit.test.ts | 83 ++---------------------------- 2 files changed, 4 insertions(+), 84 deletions(-) diff --git a/src/client/linters/mypy.ts b/src/client/linters/mypy.ts index fb5de8442f4f..7c8559881a42 100644 --- a/src/client/linters/mypy.ts +++ b/src/client/linters/mypy.ts @@ -1,4 +1,3 @@ -import * as path from 'path'; import { CancellationToken, OutputChannel, TextDocument } from 'vscode'; import '../common/extensions'; import { Product } from '../common/types'; @@ -14,9 +13,7 @@ export class MyPy extends BaseLinter { } protected async runLinter(document: TextDocument, cancellation: CancellationToken): Promise { - const cwd = this.getWorkspaceRootPath(document); - const relativePath = path.relative(cwd, document.uri.fsPath); - const messages = await this.run([relativePath], document, cancellation, REGEX); + const messages = await this.run([document.uri.fsPath], document, cancellation, REGEX); messages.forEach(msg => { msg.severity = this.parseMessagesSeverity(msg.type, this.pythonSettings.linting.mypyCategorySeverity); msg.code = msg.type; diff --git a/src/test/linters/mypy.unit.test.ts b/src/test/linters/mypy.unit.test.ts index 888c5c88888b..7dc5b4fb0afe 100644 --- a/src/test/linters/mypy.unit.test.ts +++ b/src/test/linters/mypy.unit.test.ts @@ -6,20 +6,12 @@ // tslint:disable:no-object-literal-type-assertion import { expect } from 'chai'; -import * as path from 'path'; -import * as sinon from 'sinon'; -import { anything, instance, mock, when } from 'ts-mockito'; -import { CancellationToken, CancellationTokenSource, TextDocument, Uri } from 'vscode'; -import { Product } from '../../client/common/types'; -import { ServiceContainer } from '../../client/ioc/container'; import { parseLine } from '../../client/linters/baseLinter'; -import { LinterManager } from '../../client/linters/linterManager'; -import { MyPy, REGEX } from '../../client/linters/mypy'; -import { ILinterManager, ILintMessage, LintMessageSeverity } from '../../client/linters/types'; -import { MockOutputChannel } from '../mockClasses'; +import { REGEX } from '../../client/linters/mypy'; +import { ILintMessage } from '../../client/linters/types'; // This following is a real-world example. See gh=2380. -// tslint:disable:no-multiline-string no-any max-func-body-length +// tslint:disable-next-line:no-multiline-string const output = ` provider.pyi:10: error: Incompatible types in assignment (expression has type "str", variable has type "int") provider.pyi:11: error: Name 'not_declared_var' is not defined @@ -71,72 +63,3 @@ suite('Linting - MyPy', () => { } }); }); - -suite('Test Linter', () => { - class TestMyPyLinter extends MyPy { - // tslint:disable: no-unnecessary-override - public async runLinter(document: TextDocument, cancellation: CancellationToken): Promise { - return super.runLinter(document, cancellation); - } - public getWorkspaceRootPath(document: TextDocument): string { - return super.getWorkspaceRootPath(document); - } - public async run(args: string[], document: TextDocument, cancellation: CancellationToken, regEx: string = REGEX): Promise { - return super.run(args, document, cancellation, regEx); - } - public parseMessagesSeverity(error: string, severity: any): LintMessageSeverity { - return super.parseMessagesSeverity(error, severity); - } - } - - let linter: TestMyPyLinter; - let getWorkspaceRootPathStub: sinon.SinonStub<[TextDocument], string>; - let runStub: sinon.SinonStub<[string[], TextDocument, CancellationToken, (string | undefined)?], Promise>; - const token = new CancellationTokenSource().token; - teardown(() => sinon.restore()); - setup(() => { - const linterManager = mock(LinterManager); - when(linterManager.getLinterInfo(anything())).thenReturn({ product: Product.mypy } as any); - const serviceContainer = mock(ServiceContainer); - when(serviceContainer.get(ILinterManager)).thenReturn(instance(linterManager)); - getWorkspaceRootPathStub = sinon.stub(TestMyPyLinter.prototype, 'getWorkspaceRootPath'); - runStub = sinon.stub(TestMyPyLinter.prototype, 'run'); - linter = new TestMyPyLinter(instance(mock(MockOutputChannel)), instance(serviceContainer)); - }); - - test('Get cwd based on document', async () => { - const fileUri = Uri.file(path.join('a', 'b', 'c', 'd', 'e', 'filename.py')); - const cwd = path.join('a', 'b', 'c'); - const doc = ({ uri: fileUri } as any) as TextDocument; - getWorkspaceRootPathStub.callsFake(() => cwd); - runStub.callsFake(() => Promise.resolve([])); - - await linter.runLinter(doc, token); - - expect(getWorkspaceRootPathStub.callCount).to.equal(1); - expect(getWorkspaceRootPathStub.args[0]).to.deep.equal([doc]); - }); - test('Pass relative path of document to linter', async () => { - const fileUri = Uri.file(path.join('a', 'b', 'c', 'd', 'e', 'filename.py')); - const cwd = path.join('a', 'b', 'c'); - const doc = ({ uri: fileUri } as any) as TextDocument; - getWorkspaceRootPathStub.callsFake(() => cwd); - runStub.callsFake(() => Promise.resolve([])); - - await linter.runLinter(doc, token); - - expect(runStub.callCount).to.equal(1); - expect(runStub.args[0]).to.deep.equal([[path.relative(cwd, fileUri.fsPath)], doc, token, REGEX]); - }); - test('Return empty messages', async () => { - const fileUri = Uri.file(path.join('a', 'b', 'c', 'd', 'e', 'filename.py')); - const cwd = path.join('a', 'b', 'c'); - const doc = ({ uri: fileUri } as any) as TextDocument; - getWorkspaceRootPathStub.callsFake(() => cwd); - runStub.callsFake(() => Promise.resolve([])); - - const messages = await linter.runLinter(doc, token); - - expect(messages).to.be.deep.equal([]); - }); -}); From cc5070a5d952c5e282b84b1220a867bef7323299 Mon Sep 17 00:00:00 2001 From: Kim-Adeline Miguel Date: Thu, 9 Jan 2020 16:20:08 -0800 Subject: [PATCH 2/3] News file --- news/2 Fixes/9496.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 news/2 Fixes/9496.md diff --git a/news/2 Fixes/9496.md b/news/2 Fixes/9496.md new file mode 100644 index 000000000000..ec605ad8658d --- /dev/null +++ b/news/2 Fixes/9496.md @@ -0,0 +1 @@ +Revert changes related to calling `mypy` with relative paths. From dd0a590271a8214b30828656c1c6ad820ca2bdee Mon Sep 17 00:00:00 2001 From: Kim-Adeline Miguel Date: Thu, 9 Jan 2020 17:11:34 -0800 Subject: [PATCH 3/3] Revert "Fix MyPy CI tests (#8518)" This reverts commit c634ffdb94349d9d7ce01acd49d0c2b4240a9a3c. --- src/test/linters/lint.args.test.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/linters/lint.args.test.ts b/src/test/linters/lint.args.test.ts index 551d54e7ca87..a98a7db0f012 100644 --- a/src/test/linters/lint.args.test.ts +++ b/src/test/linters/lint.args.test.ts @@ -139,8 +139,7 @@ suite('Linting - Arguments', () => { }); test('MyPy', async () => { const linter = new MyPy(outputChannel.object, serviceContainer); - const expectedPath = workspaceUri ? path.join(path.basename(path.dirname(fileUri.fsPath)), path.basename(fileUri.fsPath)) : path.basename(fileUri.fsPath); - const expectedArgs = [expectedPath]; + const expectedArgs = [fileUri.fsPath]; await testLinter(linter, expectedArgs); }); test('Pydocstyle', async () => {