Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/client/linters/linterManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ import { Bandit } from './bandit';
import { Flake8 } from './flake8';
import { LinterInfo } from './linterInfo';
import { MyPy } from './mypy';
import { Flake8ExtensionPrompt } from './prompts/flake8Prompt';
import { PylintExtensionPrompt } from './prompts/pylintPrompt';
import { getOrCreateFlake8Prompt } from './prompts/flake8Prompt';
import { getOrCreatePylintPrompt } from './prompts/pylintPrompt';
import { Prospector } from './prospector';
import { Pycodestyle } from './pycodestyle';
import { PyDocStyle } from './pydocstyle';
Expand Down Expand Up @@ -112,9 +112,9 @@ export class LinterManager implements ILinterManager {
case Product.bandit:
return new Bandit(serviceContainer);
case Product.flake8:
return new Flake8(serviceContainer, new Flake8ExtensionPrompt(serviceContainer));
return new Flake8(serviceContainer, getOrCreateFlake8Prompt(serviceContainer));
case Product.pylint:
return new Pylint(serviceContainer, new PylintExtensionPrompt(serviceContainer));
return new Pylint(serviceContainer, getOrCreatePylintPrompt(serviceContainer));
case Product.mypy:
return new MyPy(serviceContainer);
case Product.prospector:
Expand Down
25 changes: 25 additions & 0 deletions src/client/linters/prompts/common.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,38 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

import * as fs from 'fs-extra';
import * as path from 'path';
import { ShowToolsExtensionPrompt } from '../../common/experiments/groups';
import { IExperimentService, IExtensions, IPersistentState, IPersistentStateFactory } from '../../common/types';
import { IServiceContainer } from '../../ioc/types';
import { traceLog } from '../../logging';

function isExtensionInstalledButDisabled(extensions: IExtensions, extensionId: string): boolean {
// When debugging the python extension this `extensionPath` below will point to your repo.
// If you are debugging this feature then set the `extensionPath` to right location after
// the next line.
const pythonExt = extensions.getExtension('ms-python.python');
if (pythonExt) {
let found = false;
traceLog(`Extension search path: ${path.dirname(pythonExt.extensionPath)}`);
fs.readdirSync(path.dirname(pythonExt.extensionPath), { withFileTypes: false }).forEach((s) => {
if (s.toString().startsWith(extensionId)) {
found = true;
}
});
return found;
}
return false;
}

export function isExtensionInstalled(serviceContainer: IServiceContainer, extensionId: string): boolean {
const extensions: IExtensions = serviceContainer.get<IExtensions>(IExtensions);
const extension = extensions.getExtension(extensionId);
if (!extension) {
// The extension you are looking for might be disabled.
return isExtensionInstalledButDisabled(extensions, extensionId);
}
return extension !== undefined;
}

Expand Down
8 changes: 8 additions & 0 deletions src/client/linters/prompts/flake8Prompt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,11 @@ export class Flake8ExtensionPrompt implements IToolsExtensionPrompt {
return false;
}
}

let _prompt: IToolsExtensionPrompt | undefined;
export function getOrCreateFlake8Prompt(serviceContainer: IServiceContainer): IToolsExtensionPrompt {
if (!_prompt) {
_prompt = new Flake8ExtensionPrompt(serviceContainer);
}
return _prompt;
}
8 changes: 8 additions & 0 deletions src/client/linters/prompts/pylintPrompt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,11 @@ export class PylintExtensionPrompt implements IToolsExtensionPrompt {
return false;
}
}

let _prompt: IToolsExtensionPrompt | undefined;
export function getOrCreatePylintPrompt(serviceContainer: IServiceContainer): IToolsExtensionPrompt {
if (!_prompt) {
_prompt = new PylintExtensionPrompt(serviceContainer);
}
return _prompt;
}