diff --git a/news/3 Code Health/1530.md b/news/3 Code Health/1530.md new file mode 100644 index 000000000000..e5692016a587 --- /dev/null +++ b/news/3 Code Health/1530.md @@ -0,0 +1 @@ +Register language server functionality in the extension against specific resource types supporting the python language. diff --git a/src/client/common/constants.ts b/src/client/common/constants.ts index de0c7d260a9f..52533d6642f1 100644 --- a/src/client/common/constants.ts +++ b/src/client/common/constants.ts @@ -1,5 +1,10 @@ import * as path from 'path'; -export const PythonLanguage = { language: 'python' }; + +export const PYTHON_LANGUAGE = 'python'; +export const PYTHON = [ + { scheme: 'file', language: PYTHON_LANGUAGE }, + { scheme: 'untitled', language: PYTHON_LANGUAGE } +]; export namespace Commands { export const Set_Interpreter = 'python.setInterpreter'; diff --git a/src/client/debugger/configProviders/baseProvider.ts b/src/client/debugger/configProviders/baseProvider.ts index 744dca9c4ea6..87cb4639dfc6 100644 --- a/src/client/debugger/configProviders/baseProvider.ts +++ b/src/client/debugger/configProviders/baseProvider.ts @@ -9,7 +9,7 @@ import { injectable, unmanaged } from 'inversify'; import * as path from 'path'; import { CancellationToken, DebugConfiguration, DebugConfigurationProvider, Uri, WorkspaceFolder } from 'vscode'; import { IDocumentManager, IWorkspaceService } from '../../common/application/types'; -import { PythonLanguage } from '../../common/constants'; +import { PYTHON_LANGUAGE } from '../../common/constants'; import { IConfigurationService } from '../../common/types'; import { IServiceContainer } from '../../ioc/types'; import { BaseAttachRequestArguments, BaseLaunchRequestArguments, DebuggerType, DebugOptions } from '../Common/Contracts'; @@ -105,7 +105,7 @@ export abstract class BaseConfigurationProvider(IDocumentManager); const editor = documentManager.activeTextEditor; - if (editor && editor.document.languageId === PythonLanguage.language) { + if (editor && editor.document.languageId === PYTHON_LANGUAGE) { return editor.document.fileName; } } diff --git a/src/client/extension.ts b/src/client/extension.ts index 627cf7c39385..b14c115bb176 100644 --- a/src/client/extension.ts +++ b/src/client/extension.ts @@ -7,7 +7,7 @@ if ((Reflect as any).metadata === undefined) { } import { Container } from 'inversify'; import { - debug, Disposable, DocumentFilter, ExtensionContext, + debug, Disposable, ExtensionContext, extensions, IndentAction, languages, Memento, OutputChannel, window } from 'vscode'; @@ -15,7 +15,7 @@ import { AnalysisExtensionActivator } from './activation/analysis'; import { ClassicExtensionActivator } from './activation/classic'; import { IExtensionActivator } from './activation/types'; import { PythonSettings } from './common/configSettings'; -import { isPythonAnalysisEngineTest, STANDARD_OUTPUT_CHANNEL } from './common/constants'; +import { isPythonAnalysisEngineTest, PYTHON, PYTHON_LANGUAGE, STANDARD_OUTPUT_CHANNEL } from './common/constants'; import { FeatureDeprecationManager } from './common/featureDeprecationManager'; import { createDeferred } from './common/helpers'; import { PythonInstaller } from './common/installer/pythonInstallation'; @@ -59,12 +59,6 @@ import { WorkspaceSymbols } from './workspaceSymbols/main'; const activationDeferred = createDeferred(); export const activated = activationDeferred.promise; -const PYTHON_LANGUAGE = 'python'; -const PYTHON: DocumentFilter[] = [ - { scheme: 'file', language: PYTHON_LANGUAGE }, - { scheme: 'untitled', language: PYTHON_LANGUAGE } -]; - // tslint:disable-next-line:max-func-body-length export async function activate(context: ExtensionContext) { const cont = new Container(); @@ -110,7 +104,7 @@ export async function activate(context: ExtensionContext) { // Enable indentAction // tslint:disable-next-line:no-non-null-assertion - languages.setLanguageConfiguration(PYTHON_LANGUAGE!, { + languages.setLanguageConfiguration(PYTHON_LANGUAGE, { onEnterRules: [ { beforeText: /^\s*(?:def|class|for|if|elif|else|while|try|with|finally|except)\b.*:\s*\S+/, diff --git a/src/client/terminals/codeExecution/helper.ts b/src/client/terminals/codeExecution/helper.ts index f5c2e0baeb27..674d5cfba681 100644 --- a/src/client/terminals/codeExecution/helper.ts +++ b/src/client/terminals/codeExecution/helper.ts @@ -4,7 +4,7 @@ import { inject, injectable } from 'inversify'; import { Range, TextEditor, Uri } from 'vscode'; import { IApplicationShell, IDocumentManager } from '../../common/application/types'; -import { PythonLanguage } from '../../common/constants'; +import { PYTHON_LANGUAGE } from '../../common/constants'; import '../../common/extensions'; import { IServiceContainer } from '../../ioc/types'; import { ICodeExecutionHelper } from '../types'; @@ -42,7 +42,7 @@ export class CodeExecutionHelper implements ICodeExecutionHelper { this.applicationShell.showErrorMessage('The active file needs to be saved before it can be run'); return; } - if (activeEditor.document.languageId !== PythonLanguage.language) { + if (activeEditor.document.languageId !== PYTHON_LANGUAGE) { this.applicationShell.showErrorMessage('The active file is not a Python source file'); return; } diff --git a/src/client/unittests/codeLenses/main.ts b/src/client/unittests/codeLenses/main.ts index 3efd30091227..654152ca4e58 100644 --- a/src/client/unittests/codeLenses/main.ts +++ b/src/client/unittests/codeLenses/main.ts @@ -1,5 +1,5 @@ import * as vscode from 'vscode'; -import * as constants from '../../common/constants'; +import { PYTHON } from '../../common/constants'; import { PythonSymbolProvider } from '../../providers/symbolProvider'; import { ITestCollectionStorageService } from '../common/types'; import { TestFileCodeLensProvider } from './testFiles'; @@ -9,7 +9,7 @@ export function activateCodeLenses(onDidChange: vscode.EventEmitter, const disposables: vscode.Disposable[] = []; const codeLensProvider = new TestFileCodeLensProvider(onDidChange, symboldProvider, testCollectionStorage); - disposables.push(vscode.languages.registerCodeLensProvider(constants.PythonLanguage, codeLensProvider)); + disposables.push(vscode.languages.registerCodeLensProvider(PYTHON, codeLensProvider)); return { dispose: () => { disposables.forEach(d => d.dispose()); } diff --git a/src/test/debugger/configProvider/provider.attach.test.ts b/src/test/debugger/configProvider/provider.attach.test.ts index f470616ee7a5..0c3d2b297ddb 100644 --- a/src/test/debugger/configProvider/provider.attach.test.ts +++ b/src/test/debugger/configProvider/provider.attach.test.ts @@ -10,7 +10,7 @@ import * as path from 'path'; import * as TypeMoq from 'typemoq'; import { DebugConfiguration, DebugConfigurationProvider, TextDocument, TextEditor, Uri, WorkspaceFolder } from 'vscode'; import { IDocumentManager, IWorkspaceService } from '../../../client/common/application/types'; -import { PythonLanguage } from '../../../client/common/constants'; +import { PYTHON_LANGUAGE } from '../../../client/common/constants'; import { EnumEx } from '../../../client/common/enumUtils'; import { IFileSystem, IPlatformService } from '../../../client/common/platform/types'; import { PythonDebugConfigurationProvider, PythonV2DebugConfigurationProvider } from '../../../client/debugger'; @@ -77,7 +77,7 @@ enum OS { const workspaceFolder = createMoqWorkspaceFolder(__dirname); const pythonFile = 'xyz.py'; - setupActiveEditor(pythonFile, PythonLanguage.language); + setupActiveEditor(pythonFile, PYTHON_LANGUAGE); const debugConfig = await debugProvider.resolveDebugConfiguration!(workspaceFolder, { request: 'attach' } as DebugConfiguration); @@ -92,7 +92,7 @@ enum OS { test('Defaults should be returned when an empty object is passed without Workspace Folder, no workspaces and active file', async () => { const pythonFile = 'xyz.py'; - setupActiveEditor(pythonFile, PythonLanguage.language); + setupActiveEditor(pythonFile, PYTHON_LANGUAGE); setupWorkspaces([]); const debugConfig = await debugProvider.resolveDebugConfiguration!(undefined, { request: 'attach' } as DebugConfiguration); @@ -108,7 +108,7 @@ enum OS { } }); test('Defaults should be returned when an empty object is passed without Workspace Folder, no workspaces and no active file', async () => { - setupActiveEditor(undefined, PythonLanguage.language); + setupActiveEditor(undefined, PYTHON_LANGUAGE); setupWorkspaces([]); const debugConfig = await debugProvider.resolveDebugConfiguration!(undefined, { request: 'attach' } as DebugConfiguration); @@ -137,7 +137,7 @@ enum OS { }); test('Defaults should be returned when an empty object is passed without Workspace Folder, with a workspace and an active python file', async () => { const activeFile = 'xyz.py'; - setupActiveEditor(activeFile, PythonLanguage.language); + setupActiveEditor(activeFile, PYTHON_LANGUAGE); const defaultWorkspace = path.join('usr', 'desktop'); setupWorkspaces([defaultWorkspace]); @@ -156,7 +156,7 @@ enum OS { test('Ensure \'localRoot\' is left unaltered', async () => { const activeFile = 'xyz.py'; const workspaceFolder = createMoqWorkspaceFolder(__dirname); - setupActiveEditor(activeFile, PythonLanguage.language); + setupActiveEditor(activeFile, PYTHON_LANGUAGE); const defaultWorkspace = path.join('usr', 'desktop'); setupWorkspaces([defaultWorkspace]); @@ -174,7 +174,7 @@ enum OS { } const activeFile = 'xyz.py'; const workspaceFolder = createMoqWorkspaceFolder(__dirname); - setupActiveEditor(activeFile, PythonLanguage.language); + setupActiveEditor(activeFile, PYTHON_LANGUAGE); const defaultWorkspace = path.join('usr', 'desktop'); setupWorkspaces([defaultWorkspace]); @@ -191,7 +191,7 @@ enum OS { } const activeFile = 'xyz.py'; const workspaceFolder = createMoqWorkspaceFolder(__dirname); - setupActiveEditor(activeFile, PythonLanguage.language); + setupActiveEditor(activeFile, PYTHON_LANGUAGE); const defaultWorkspace = path.join('usr', 'desktop'); setupWorkspaces([defaultWorkspace]); @@ -205,7 +205,7 @@ enum OS { test('Ensure \'remoteRoot\' is left unaltered', async () => { const activeFile = 'xyz.py'; const workspaceFolder = createMoqWorkspaceFolder(__dirname); - setupActiveEditor(activeFile, PythonLanguage.language); + setupActiveEditor(activeFile, PYTHON_LANGUAGE); const defaultWorkspace = path.join('usr', 'desktop'); setupWorkspaces([defaultWorkspace]); @@ -217,7 +217,7 @@ enum OS { test('Ensure \'port\' is left unaltered', async () => { const activeFile = 'xyz.py'; const workspaceFolder = createMoqWorkspaceFolder(__dirname); - setupActiveEditor(activeFile, PythonLanguage.language); + setupActiveEditor(activeFile, PYTHON_LANGUAGE); const defaultWorkspace = path.join('usr', 'desktop'); setupWorkspaces([defaultWorkspace]); @@ -229,7 +229,7 @@ enum OS { test('Ensure \'debugOptions\' are left unaltered', async () => { const activeFile = 'xyz.py'; const workspaceFolder = createMoqWorkspaceFolder(__dirname); - setupActiveEditor(activeFile, PythonLanguage.language); + setupActiveEditor(activeFile, PYTHON_LANGUAGE); const defaultWorkspace = path.join('usr', 'desktop'); setupWorkspaces([defaultWorkspace]); diff --git a/src/test/debugger/configProvider/provider.test.ts b/src/test/debugger/configProvider/provider.test.ts index 0ea18a47ac56..b73c1b504099 100644 --- a/src/test/debugger/configProvider/provider.test.ts +++ b/src/test/debugger/configProvider/provider.test.ts @@ -10,7 +10,7 @@ import * as path from 'path'; import * as TypeMoq from 'typemoq'; import { DebugConfiguration, DebugConfigurationProvider, TextDocument, TextEditor, Uri, WorkspaceFolder } from 'vscode'; import { IApplicationShell, IDocumentManager, IWorkspaceService } from '../../../client/common/application/types'; -import { PythonLanguage } from '../../../client/common/constants'; +import { PYTHON_LANGUAGE } from '../../../client/common/constants'; import { IFileSystem, IPlatformService } from '../../../client/common/platform/types'; import { IPythonExecutionFactory, IPythonExecutionService } from '../../../client/common/process/types'; import { IConfigurationService, IPythonSettings } from '../../../client/common/types'; @@ -94,7 +94,7 @@ import { IServiceContainer } from '../../../client/ioc/types'; const pythonFile = 'xyz.py'; setupIoc(pythonPath); - setupActiveEditor(pythonFile, PythonLanguage.language); + setupActiveEditor(pythonFile, PYTHON_LANGUAGE); const debugConfig = await debugProvider.resolveDebugConfiguration!(workspaceFolder, {} as DebugConfiguration); @@ -116,7 +116,7 @@ import { IServiceContainer } from '../../../client/ioc/types'; const workspaceFolder = createMoqWorkspaceFolder(__dirname); const pythonFile = 'xyz.py'; setupIoc(pythonPath); - setupActiveEditor(pythonFile, PythonLanguage.language); + setupActiveEditor(pythonFile, PYTHON_LANGUAGE); const debugConfig = await debugProvider.resolveDebugConfiguration!(workspaceFolder, { noDebug: true } as any as DebugConfiguration); @@ -137,7 +137,7 @@ import { IServiceContainer } from '../../../client/ioc/types'; const pythonPath = `PythonPath_${new Date().toString()}`; const pythonFile = 'xyz.py'; setupIoc(pythonPath); - setupActiveEditor(pythonFile, PythonLanguage.language); + setupActiveEditor(pythonFile, PYTHON_LANGUAGE); setupWorkspaces([]); const debugConfig = await debugProvider.resolveDebugConfiguration!(undefined, {} as DebugConfiguration); @@ -159,7 +159,7 @@ import { IServiceContainer } from '../../../client/ioc/types'; test('Defaults should be returned when an empty object is passed without Workspace Folder, no workspaces and no active file', async () => { const pythonPath = `PythonPath_${new Date().toString()}`; setupIoc(pythonPath); - setupActiveEditor(undefined, PythonLanguage.language); + setupActiveEditor(undefined, PYTHON_LANGUAGE); setupWorkspaces([]); const debugConfig = await debugProvider.resolveDebugConfiguration!(undefined, {} as DebugConfiguration); @@ -199,7 +199,7 @@ import { IServiceContainer } from '../../../client/ioc/types'; const pythonPath = `PythonPath_${new Date().toString()}`; const activeFile = 'xyz.py'; setupIoc(pythonPath); - setupActiveEditor(activeFile, PythonLanguage.language); + setupActiveEditor(activeFile, PYTHON_LANGUAGE); const defaultWorkspace = path.join('usr', 'desktop'); setupWorkspaces([defaultWorkspace]); @@ -224,7 +224,7 @@ import { IServiceContainer } from '../../../client/ioc/types'; const activeFile = 'xyz.py'; const workspaceFolder = createMoqWorkspaceFolder(__dirname); setupIoc(pythonPath); - setupActiveEditor(activeFile, PythonLanguage.language); + setupActiveEditor(activeFile, PYTHON_LANGUAGE); const defaultWorkspace = path.join('usr', 'desktop'); setupWorkspaces([defaultWorkspace]); @@ -237,7 +237,7 @@ import { IServiceContainer } from '../../../client/ioc/types'; const activeFile = 'xyz.py'; const workspaceFolder = createMoqWorkspaceFolder(__dirname); setupIoc(pythonPath); - setupActiveEditor(activeFile, PythonLanguage.language); + setupActiveEditor(activeFile, PYTHON_LANGUAGE); const defaultWorkspace = path.join('usr', 'desktop'); setupWorkspaces([defaultWorkspace]); @@ -254,7 +254,7 @@ import { IServiceContainer } from '../../../client/ioc/types'; const workspaceFolder = createMoqWorkspaceFolder(__dirname); const pythonFile = 'xyz.py'; setupIoc(pythonPath); - setupActiveEditor(pythonFile, PythonLanguage.language); + setupActiveEditor(pythonFile, PYTHON_LANGUAGE); const debugConfig = await debugProvider.resolveDebugConfiguration!(workspaceFolder, {} as DebugConfiguration); @@ -271,7 +271,7 @@ import { IServiceContainer } from '../../../client/ioc/types'; const workspaceFolder = createMoqWorkspaceFolder(__dirname); const pythonFile = 'xyz.py'; setupIoc(pythonPath); - setupActiveEditor(pythonFile, PythonLanguage.language); + setupActiveEditor(pythonFile, PYTHON_LANGUAGE); const debugConfig = await debugProvider.resolveDebugConfiguration!(workspaceFolder, {} as DebugConfiguration); @@ -284,7 +284,7 @@ import { IServiceContainer } from '../../../client/ioc/types'; const workspaceFolder = createMoqWorkspaceFolder(__dirname); const pythonFile = 'xyz.py'; setupIoc(pythonPath, isWindows, isMac, isLinux); - setupActiveEditor(pythonFile, PythonLanguage.language); + setupActiveEditor(pythonFile, PYTHON_LANGUAGE); const debugConfig = await debugProvider.resolveDebugConfiguration!(workspaceFolder, {} as DebugConfiguration); if (isWindows) { @@ -321,7 +321,7 @@ import { IServiceContainer } from '../../../client/ioc/types'; const pythonFile = 'xyz.py'; setupIoc(pythonPath, isWindows, isMac, isLinux); - setupActiveEditor(pythonFile, PythonLanguage.language); + setupActiveEditor(pythonFile, PYTHON_LANGUAGE); const execOutput = pyramidExists ? Promise.resolve({ stdout: pyramidFilePath }) : Promise.reject(new Error('No Module')); pythonExecutionService.setup(e => e.exec(TypeMoq.It.isValue(args), TypeMoq.It.isAny())) @@ -379,7 +379,7 @@ import { IServiceContainer } from '../../../client/ioc/types'; const workspaceFolder = createMoqWorkspaceFolder(__dirname); const pythonFile = 'xyz.py'; setupIoc(pythonPath); - setupActiveEditor(pythonFile, PythonLanguage.language); + setupActiveEditor(pythonFile, PYTHON_LANGUAGE); const debugConfig = await debugProvider.resolveDebugConfiguration!(workspaceFolder, { module: 'flask' } as any as DebugConfiguration); diff --git a/src/test/linters/lintengine.test.ts b/src/test/linters/lintengine.test.ts index 44520df46cdc..e11c2dcdc5c4 100644 --- a/src/test/linters/lintengine.test.ts +++ b/src/test/linters/lintengine.test.ts @@ -4,7 +4,7 @@ import * as TypeMoq from 'typemoq'; import { OutputChannel, TextDocument, Uri } from 'vscode'; import { IDocumentManager, IWorkspaceService } from '../../client/common/application/types'; -import { PythonLanguage, STANDARD_OUTPUT_CHANNEL } from '../../client/common/constants'; +import { PYTHON_LANGUAGE, STANDARD_OUTPUT_CHANNEL } from '../../client/common/constants'; import '../../client/common/extensions'; import { IFileSystem } from '../../client/common/platform/types'; import { IConfigurationService, ILintingSettings, IOutputChannel, IPythonSettings } from '../../client/common/types'; @@ -55,7 +55,7 @@ suite('Linting - LintingEngine', () => { }); test('Ensure document.uri is passed into isLintingEnabled', () => { - const doc = mockTextDocument('a.py', PythonLanguage.language, true); + const doc = mockTextDocument('a.py', PYTHON_LANGUAGE, true); try { lintingEngine.lintDocument(doc, 'auto').ignoreErrors(); } catch { @@ -63,7 +63,7 @@ suite('Linting - LintingEngine', () => { } }); test('Ensure document.uri is passed into createLinter', () => { - const doc = mockTextDocument('a.py', PythonLanguage.language, true); + const doc = mockTextDocument('a.py', PYTHON_LANGUAGE, true); try { lintingEngine.lintDocument(doc, 'auto').ignoreErrors(); } catch { @@ -72,7 +72,7 @@ suite('Linting - LintingEngine', () => { }); test('Verify files that match ignore pattern are not linted', async () => { - const doc = mockTextDocument('a1.py', PythonLanguage.language, true, ['a*.py']); + const doc = mockTextDocument('a1.py', PYTHON_LANGUAGE, true, ['a*.py']); await lintingEngine.lintDocument(doc, 'auto'); lintManager.verify(l => l.createLinter(TypeMoq.It.isAny(), TypeMoq.It.isAny(), TypeMoq.It.isAny(), TypeMoq.It.isAny()), TypeMoq.Times.never()); }); @@ -84,23 +84,23 @@ suite('Linting - LintingEngine', () => { }); test('Ensure files with git scheme are not linted', async () => { - const doc = mockTextDocument('a1.py', PythonLanguage.language, false, [], 'git'); + const doc = mockTextDocument('a1.py', PYTHON_LANGUAGE, false, [], 'git'); await lintingEngine.lintDocument(doc, 'auto'); lintManager.verify(l => l.createLinter(TypeMoq.It.isAny(), TypeMoq.It.isAny(), TypeMoq.It.isAny(), TypeMoq.It.isAny()), TypeMoq.Times.never()); }); test('Ensure files with showModifications scheme are not linted', async () => { - const doc = mockTextDocument('a1.py', PythonLanguage.language, false, [], 'showModifications'); + const doc = mockTextDocument('a1.py', PYTHON_LANGUAGE, false, [], 'showModifications'); await lintingEngine.lintDocument(doc, 'auto'); lintManager.verify(l => l.createLinter(TypeMoq.It.isAny(), TypeMoq.It.isAny(), TypeMoq.It.isAny(), TypeMoq.It.isAny()), TypeMoq.Times.never()); }); test('Ensure files with svn scheme are not linted', async () => { - const doc = mockTextDocument('a1.py', PythonLanguage.language, false, [], 'svn'); + const doc = mockTextDocument('a1.py', PYTHON_LANGUAGE, false, [], 'svn'); await lintingEngine.lintDocument(doc, 'auto'); lintManager.verify(l => l.createLinter(TypeMoq.It.isAny(), TypeMoq.It.isAny(), TypeMoq.It.isAny(), TypeMoq.It.isAny()), TypeMoq.Times.never()); }); test('Ensure non-existing files are not linted', async () => { - const doc = mockTextDocument('file.py', PythonLanguage.language, false, []); + const doc = mockTextDocument('file.py', PYTHON_LANGUAGE, false, []); await lintingEngine.lintDocument(doc, 'auto'); lintManager.verify(l => l.createLinter(TypeMoq.It.isAny(), TypeMoq.It.isAny(), TypeMoq.It.isAny(), TypeMoq.It.isAny()), TypeMoq.Times.never()); }); diff --git a/src/test/terminals/codeExecution/helper.test.ts b/src/test/terminals/codeExecution/helper.test.ts index a9344344d548..1d0347c8d48b 100644 --- a/src/test/terminals/codeExecution/helper.test.ts +++ b/src/test/terminals/codeExecution/helper.test.ts @@ -10,7 +10,7 @@ import * as path from 'path'; import * as TypeMoq from 'typemoq'; import { Range, Selection, TextDocument, TextEditor, TextLine, Uri } from 'vscode'; import { IApplicationShell, IDocumentManager } from '../../../client/common/application/types'; -import { EXTENSION_ROOT_DIR, PythonLanguage } from '../../../client/common/constants'; +import { EXTENSION_ROOT_DIR, PYTHON_LANGUAGE } from '../../../client/common/constants'; import { IServiceContainer } from '../../../client/ioc/types'; import { CodeExecutionHelper } from '../../../client/terminals/codeExecution/helper'; import { ICodeExecutionHelper } from '../../../client/terminals/types'; @@ -92,7 +92,7 @@ suite('Terminal - Code Execution Helper', () => { test('Returns file uri', async () => { document.setup(doc => doc.isUntitled).returns(() => false); - document.setup(doc => doc.languageId).returns(() => PythonLanguage.language); + document.setup(doc => doc.languageId).returns(() => PYTHON_LANGUAGE); const expectedUri = Uri.file('one.py'); document.setup(doc => doc.uri).returns(() => expectedUri); documentManager.setup(doc => doc.activeTextEditor).returns(() => editor.object); @@ -104,7 +104,7 @@ suite('Terminal - Code Execution Helper', () => { test('Returns file uri even if saving fails', async () => { document.setup(doc => doc.isUntitled).returns(() => false); document.setup(doc => doc.isDirty).returns(() => true); - document.setup(doc => doc.languageId).returns(() => PythonLanguage.language); + document.setup(doc => doc.languageId).returns(() => PYTHON_LANGUAGE); document.setup(doc => doc.save()).returns(() => Promise.resolve(false)); const expectedUri = Uri.file('one.py'); document.setup(doc => doc.uri).returns(() => expectedUri); @@ -117,7 +117,7 @@ suite('Terminal - Code Execution Helper', () => { test('Dirty files are saved', async () => { document.setup(doc => doc.isUntitled).returns(() => false); document.setup(doc => doc.isDirty).returns(() => true); - document.setup(doc => doc.languageId).returns(() => PythonLanguage.language); + document.setup(doc => doc.languageId).returns(() => PYTHON_LANGUAGE); const expectedUri = Uri.file('one.py'); document.setup(doc => doc.uri).returns(() => expectedUri); documentManager.setup(doc => doc.activeTextEditor).returns(() => editor.object); @@ -130,7 +130,7 @@ suite('Terminal - Code Execution Helper', () => { test('Non-Dirty files are not-saved', async () => { document.setup(doc => doc.isUntitled).returns(() => false); document.setup(doc => doc.isDirty).returns(() => false); - document.setup(doc => doc.languageId).returns(() => PythonLanguage.language); + document.setup(doc => doc.languageId).returns(() => PYTHON_LANGUAGE); const expectedUri = Uri.file('one.py'); document.setup(doc => doc.uri).returns(() => expectedUri); documentManager.setup(doc => doc.activeTextEditor).returns(() => editor.object); @@ -173,7 +173,7 @@ suite('Terminal - Code Execution Helper', () => { documentManager.setup(d => d.textDocuments).returns(() => [document.object]).verifiable(TypeMoq.Times.once()); document.setup(doc => doc.isUntitled).returns(() => false); document.setup(doc => doc.isDirty).returns(() => true); - document.setup(doc => doc.languageId).returns(() => PythonLanguage.language); + document.setup(doc => doc.languageId).returns(() => PYTHON_LANGUAGE); const expectedUri = Uri.file('one.py'); document.setup(doc => doc.uri).returns(() => expectedUri); @@ -186,7 +186,7 @@ suite('Terminal - Code Execution Helper', () => { documentManager.setup(d => d.textDocuments).returns(() => [document.object]).verifiable(TypeMoq.Times.once()); document.setup(doc => doc.isUntitled).returns(() => false); document.setup(doc => doc.isDirty).returns(() => false); - document.setup(doc => doc.languageId).returns(() => PythonLanguage.language); + document.setup(doc => doc.languageId).returns(() => PYTHON_LANGUAGE); const expectedUri = Uri.file('one.py'); document.setup(doc => doc.uri).returns(() => expectedUri);