in src/main.ts [85:164]
public provideCodeActions(document: TextDocument, _range: Range, context: CodeActionContext, _token: CancellationToken): Command[] {
function addFixNpmInstallModule(cmds: Command[], moduleName: string) {
cmds.push({
title: `run: npm install '${moduleName}'`,
command: 'npm-script.installInOutputWindow',
arguments: [path.dirname(document.fileName), moduleName]
});
}
function addFixNpmInstall(cmds: Command[]) {
cmds.push({
title: `run: npm install`,
command: 'npm-script.installInOutputWindow',
arguments: [path.dirname(document.fileName)]
});
}
function addFixValidate(cmds: Command[]) {
cmds.push({
title: `validate installed modules`,
command: 'npm-script.validate',
arguments: [path.dirname(document.fileName)]
});
}
function addFixNpmUninstallModule(cmds: Command[], moduleName: string) {
cmds.push({
title: `run: npm uninstall '${moduleName}'`,
command: 'npm-script.uninstallInOutputWindow',
arguments: [path.dirname(document.fileName), moduleName]
});
}
function addFixNpmInstallModuleSave(cmds: Command[], moduleName: string) {
cmds.push({
title: `run: npm install '${moduleName}' --save`,
command: 'npm-script.installInOutputWindow',
arguments: [path.dirname(document.fileName), moduleName, '--save']
});
}
function addFixNpmInstallModuleSaveDev(cmds: Command[], moduleName: string) {
cmds.push({
title: `run: npm install '${moduleName}' --save-dev`,
command: 'npm-script.installInOutputWindow',
arguments: [path.dirname(document.fileName), moduleName, '--save-dev']
});
}
const cmds: Command[] = [];
context.diagnostics.forEach(diag => {
if (diag.source === 'npm') {
let result = /^Module '(\S*)' is not installed/.exec(diag.message);
if (result) {
const moduleName = result[1];
addFixNpmInstallModule(cmds, moduleName);
addFixNpmInstall(cmds);
addFixValidate(cmds);
return;
}
result = /^Module '(\S*)' the installed version/.exec(diag.message);
if (result) {
const moduleName = result[1];
addFixNpmInstallModule(cmds, moduleName);
addFixValidate(cmds);
return;
}
result = /^Module '(\S*)' is extraneous/.exec(diag.message);
if (result) {
const moduleName = result[1];
addFixNpmUninstallModule(cmds, moduleName);
addFixNpmInstallModuleSave(cmds, moduleName);
addFixNpmInstallModuleSaveDev(cmds, moduleName);
addFixValidate(cmds);
return;
}
}
});
return cmds;
}