提交 a845443e 编写于 作者: M Matt Bierner

Clean up inferred project config logic

上级 1b579ed2
......@@ -27,6 +27,7 @@ import { TypeScriptServiceConfiguration, TsServerLogLevel } from './utils/config
import { TypeScriptVersionProvider, TypeScriptVersion } from './utils/versionProvider';
import { TypeScriptVersionPicker } from './utils/versionPicker';
import * as fileSchemes from './utils/fileSchemes';
import { inferredProjectConfig } from './utils/tsconfig';
const localize = nls.loadMessageBundle();
......@@ -476,20 +477,12 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
}
private getCompilerOptionsForInferredProjects(configuration: TypeScriptServiceConfiguration): Proto.ExternalProjectCompilerOptions {
const compilerOptions: Proto.ExternalProjectCompilerOptions = {
module: 'CommonJS' as Proto.ModuleKind,
target: 'Es2016' as Proto.ScriptTarget,
return {
...inferredProjectConfig(configuration),
allowJs: true,
allowSyntheticDefaultImports: true,
allowNonTsExtensions: true,
allowJs: true,
jsx: 'Preserve' as Proto.JsxEmit
};
if (this.apiVersion.has230Features()) {
compilerOptions.checkJs = configuration.checkJs;
compilerOptions.experimentalDecorators = configuration.experimentalDecorators;
}
return compilerOptions;
}
private serviceExited(restart: boolean): void {
......
......@@ -5,27 +5,39 @@
import * as vscode from 'vscode';
import * as path from 'path';
import * as Proto from '../protocol';
import { TypeScriptServiceConfiguration } from './configuration';
export function isImplicitProjectConfigFile(configFileName: string) {
return configFileName.indexOf('/dev/null/') === 0;
}
function getEmptyConfig(
isTypeScriptProject: boolean,
export function inferredProjectConfig(
config: TypeScriptServiceConfiguration
) {
const compilerOptions = [
'"target": "es2016"',
'"module": "commonjs"',
'"jsx": "preserve"',
];
if (!isTypeScriptProject && config.checkJs) {
compilerOptions.push('"checkJs": true');
): Proto.ExternalProjectCompilerOptions {
const base: Proto.ExternalProjectCompilerOptions = {
module: 'commonjs' as Proto.ModuleKind,
target: 'es2016' as Proto.ScriptTarget,
jsx: 'preserve' as Proto.JsxEmit
};
if (config.checkJs) {
base.checkJs = true;
}
if (!isTypeScriptProject && config.experimentalDecorators) {
compilerOptions.push('"experimentalDecorators": true');
if (config.experimentalDecorators) {
base.experimentalDecorators = true;
}
return base;
}
function getEmptyConfigSnippet(
config: TypeScriptServiceConfiguration
) {
const baseConfig = inferredProjectConfig(config);
const compilerOptions = Object.keys(baseConfig).map(key => `"${key}": ${JSON.stringify(baseConfig[key])}`);
return new vscode.SnippetString(`{
"compilerOptions": {
${compilerOptions.join(',\n\t\t')}$0
......@@ -51,7 +63,7 @@ export async function openOrCreateConfigFile(
const doc = await vscode.workspace.openTextDocument(configFile.with({ scheme: 'untitled' }));
const editor = await vscode.window.showTextDocument(doc, col);
if (editor.document.getText().length === 0) {
await editor.insertSnippet(getEmptyConfig(isTypeScriptProject, config));
await editor.insertSnippet(getEmptyConfigSnippet(config));
}
return editor;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册