public provideCodeActions()

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;
	}