Make script blocks respect js/ts.implicitProjectConfig.strictNullChecks (#179333)

Fixes #179331

Also fixes experimental decorators for script blocks
This commit is contained in:
Matt Bierner 2023-04-06 06:59:44 -07:00 committed by GitHub
parent a0ff19a2cd
commit e0ebb7b740
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 17 additions and 7 deletions

View file

@ -155,7 +155,7 @@ async function startClientWithParticipants(languageParticipants: LanguagePartici
const clientOptions: LanguageClientOptions = {
documentSelector,
synchronize: {
configurationSection: ['html', 'css', 'javascript'], // the settings to synchronize
configurationSection: ['html', 'css', 'javascript', 'js/ts'], // the settings to synchronize
},
initializationOptions: {
embeddedLanguages,

View file

@ -120,8 +120,9 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment)
let promise = documentSettings[textDocument.uri];
if (!promise) {
const scopeUri = textDocument.uri;
const configRequestParam: ConfigurationParams = { items: [{ scopeUri, section: 'css' }, { scopeUri, section: 'html' }, { scopeUri, section: 'javascript' }] };
promise = connection.sendRequest(ConfigurationRequest.type, configRequestParam).then(s => ({ css: s[0], html: s[1], javascript: s[2] }));
const sections = ['css', 'html', 'javascript', 'js/ts'];
const configRequestParam: ConfigurationParams = { items: sections.map(section => ({ scopeUri, section })) };
promise = connection.sendRequest(ConfigurationRequest.type, configRequestParam).then(s => ({ css: s[0], html: s[1], javascript: s[2], 'js/ts': s[3] }));
documentSettings[textDocument.uri] = promise;
}
return promise;

View file

@ -103,12 +103,20 @@ export function getJavaScriptMode(documentRegions: LanguageModelCache<HTMLDocume
const host = getLanguageServiceHost(languageId === 'javascript' ? ts.ScriptKind.JS : ts.ScriptKind.TS);
const globalSettings: Settings = {};
function updateHostSettings(settings: Settings) {
const hostSettings = host.getCompilationSettings();
hostSettings.experimentalDecorators = settings?.['js/ts']?.implicitProjectConfig?.experimentalDecorators;
hostSettings.strictNullChecks = settings?.['js/ts']?.implicitProjectConfig.strictNullChecks;
}
return {
getId() {
return languageId;
},
async doValidation(document: TextDocument, settings = workspace.settings): Promise<Diagnostic[]> {
host.getCompilationSettings()['experimentalDecorators'] = settings && settings.javascript && settings.javascript.implicitProjectConfig.experimentalDecorators;
updateHostSettings(settings);
const jsDocument = jsDocuments.get(document);
const languageService = await host.getLanguageService(jsDocument);
const syntaxDiagnostics: ts.Diagnostic[] = languageService.getSyntacticDiagnostics(jsDocument.uri);

View file

@ -37,9 +37,10 @@ export { ClientCapabilities, DocumentContext, LanguageService, HTMLDocument, HTM
export { TextDocument } from 'vscode-languageserver-textdocument';
export interface Settings {
css?: any;
html?: any;
javascript?: any;
readonly css?: any;
readonly html?: any;
readonly javascript?: any;
readonly 'js/ts'?: any;
}
export interface Workspace {