Pass language desc around instead of modeid

This commit is contained in:
Matt Bierner
2022-01-31 17:21:25 -08:00
parent 2a1274e4a9
commit c33f53e1f2
8 changed files with 32 additions and 26 deletions

View File

@@ -11,6 +11,7 @@ import { CachedResponse } from '../../tsServer/cachedResponse';
import { ClientCapability, ITypeScriptServiceClient } from '../../typescriptService';
import { conditionalRegistration, requireConfiguration, requireSomeCapability } from '../../utils/dependentRegistration';
import { DocumentSelector } from '../../utils/documentSelector';
import { LanguageDescription } from '../../utils/languageDescription';
import * as typeConverters from '../../utils/typeConverters';
import { getSymbolRange, ReferencesCodeLens, TypeScriptBaseCodeLensProvider } from './baseCodeLensProvider';
@@ -89,12 +90,12 @@ export default class TypeScriptImplementationsCodeLensProvider extends TypeScrip
export function register(
selector: DocumentSelector,
modeId: string,
language: LanguageDescription,
client: ITypeScriptServiceClient,
cachedResponse: CachedResponse<Proto.NavTreeResponse>,
) {
return conditionalRegistration([
requireConfiguration(modeId, 'implementationsCodeLens.enabled'),
requireConfiguration(language.id, 'implementationsCodeLens.enabled'),
requireSomeCapability(client, ClientCapability.Semantic),
], () => {
return vscode.languages.registerCodeLensProvider(selector.semantic,

View File

@@ -12,6 +12,7 @@ import { ExecutionTarget } from '../../tsServer/server';
import { ClientCapability, ITypeScriptServiceClient } from '../../typescriptService';
import { conditionalRegistration, requireConfiguration, requireSomeCapability } from '../../utils/dependentRegistration';
import { DocumentSelector } from '../../utils/documentSelector';
import { LanguageDescription } from '../../utils/languageDescription';
import * as typeConverters from '../../utils/typeConverters';
import { getSymbolRange, ReferencesCodeLens, TypeScriptBaseCodeLensProvider } from './baseCodeLensProvider';
@@ -21,7 +22,7 @@ export class TypeScriptReferencesCodeLensProvider extends TypeScriptBaseCodeLens
public constructor(
client: ITypeScriptServiceClient,
protected _cachedResponse: CachedResponse<Proto.NavTreeResponse>,
private modeId: string
private readonly language: LanguageDescription
) {
super(client, _cachedResponse);
}
@@ -70,7 +71,7 @@ export class TypeScriptReferencesCodeLensProvider extends TypeScriptBaseCodeLens
switch (item.kind) {
case PConst.Kind.function: {
const showOnAllFunctions = vscode.workspace.getConfiguration(this.modeId).get<boolean>('referencesCodeLens.showOnAllFunctions');
const showOnAllFunctions = vscode.workspace.getConfiguration(this.language.id).get<boolean>('referencesCodeLens.showOnAllFunctions');
if (showOnAllFunctions) {
return getSymbolRange(document, item);
}
@@ -126,15 +127,15 @@ export class TypeScriptReferencesCodeLensProvider extends TypeScriptBaseCodeLens
export function register(
selector: DocumentSelector,
modeId: string,
language: LanguageDescription,
client: ITypeScriptServiceClient,
cachedResponse: CachedResponse<Proto.NavTreeResponse>,
) {
return conditionalRegistration([
requireConfiguration(modeId, 'referencesCodeLens.enabled'),
requireConfiguration(language.id, 'referencesCodeLens.enabled'),
requireSomeCapability(client, ClientCapability.Semantic),
], () => {
return vscode.languages.registerCodeLensProvider(selector.semantic,
new TypeScriptReferencesCodeLensProvider(client, cachedResponse, modeId));
new TypeScriptReferencesCodeLensProvider(client, cachedResponse, language));
});
}

View File

@@ -14,6 +14,7 @@ import { nulToken } from '../utils/cancellation';
import { applyCodeAction } from '../utils/codeAction';
import { conditionalRegistration, requireConfiguration, requireSomeCapability } from '../utils/dependentRegistration';
import { DocumentSelector } from '../utils/documentSelector';
import { LanguageDescription } from '../utils/languageDescription';
import { parseKindModifier } from '../utils/modifiers';
import * as Previewer from '../utils/previewer';
import { snippetForFunctionCall } from '../utils/snippetForFunctionCall';
@@ -643,7 +644,7 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider<
constructor(
private readonly client: ITypeScriptServiceClient,
private readonly modeId: string,
private readonly language: LanguageDescription,
private readonly typingsStatus: TypingsStatus,
private readonly fileConfigurationManager: FileConfigurationManager,
commandManager: CommandManager,
@@ -678,7 +679,7 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider<
}
const line = document.lineAt(position.line);
const completionConfiguration = CompletionConfiguration.getConfigurationForResource(this.modeId, document.uri);
const completionConfiguration = CompletionConfiguration.getConfigurationForResource(this.language.id, document.uri);
if (!this.shouldTrigger(context, line, position, completionConfiguration)) {
return undefined;
@@ -919,7 +920,7 @@ function shouldExcludeCompletionEntry(
export function register(
selector: DocumentSelector,
modeId: string,
language: LanguageDescription,
client: ITypeScriptServiceClient,
typingsStatus: TypingsStatus,
fileConfigurationManager: FileConfigurationManager,
@@ -928,11 +929,11 @@ export function register(
onCompletionAccepted: (item: vscode.CompletionItem) => void
) {
return conditionalRegistration([
requireConfiguration(modeId, 'suggest.enabled'),
requireConfiguration(language.id, 'suggest.enabled'),
requireSomeCapability(client, ClientCapability.EnhancedSyntax, ClientCapability.Semantic),
], () => {
return vscode.languages.registerCompletionItemProvider(selector.syntax,
new TypeScriptCompletionItemProvider(client, modeId, typingsStatus, fileConfigurationManager, commandManager, telemetryReporter, onCompletionAccepted),
new TypeScriptCompletionItemProvider(client, language, typingsStatus, fileConfigurationManager, commandManager, telemetryReporter, onCompletionAccepted),
...TypeScriptCompletionItemProvider.triggerCharacters);
});
}

View File

@@ -8,6 +8,7 @@ import type * as Proto from '../protocol';
import { ITypeScriptServiceClient } from '../typescriptService';
import { conditionalRegistration, requireConfiguration } from '../utils/dependentRegistration';
import { DocumentSelector } from '../utils/documentSelector';
import { LanguageDescription } from '../utils/languageDescription';
import * as typeConverters from '../utils/typeConverters';
import FileConfigurationManager from './fileConfigurationManager';
@@ -86,12 +87,12 @@ class TypeScriptFormattingProvider implements vscode.DocumentRangeFormattingEdit
export function register(
selector: DocumentSelector,
modeId: string,
language: LanguageDescription,
client: ITypeScriptServiceClient,
fileConfigurationManager: FileConfigurationManager
) {
return conditionalRegistration([
requireConfiguration(modeId, 'format.enable'),
requireConfiguration(language.id, 'format.enable'),
], () => {
const formattingProvider = new TypeScriptFormattingProvider(client, fileConfigurationManager);
return vscode.Disposable.from(

View File

@@ -8,6 +8,7 @@ import * as nls from 'vscode-nls';
import { ITypeScriptServiceClient } from '../typescriptService';
import { conditionalRegistration, requireConfiguration } from '../utils/dependentRegistration';
import { DocumentSelector } from '../utils/documentSelector';
import { LanguageDescription } from '../utils/languageDescription';
import * as typeConverters from '../utils/typeConverters';
import FileConfigurationManager from './fileConfigurationManager';
@@ -121,13 +122,13 @@ export function templateToSnippet(template: string): vscode.SnippetString {
export function register(
selector: DocumentSelector,
modeId: string,
language: LanguageDescription,
client: ITypeScriptServiceClient,
fileConfigurationManager: FileConfigurationManager,
): vscode.Disposable {
return conditionalRegistration([
requireConfiguration(modeId, 'suggest.completeJSDocs')
requireConfiguration(language.id, 'suggest.completeJSDocs')
], () => {
return vscode.languages.registerCompletionItemProvider(selector.syntax,
new JsDocCompletionProvider(client, fileConfigurationManager),

View File

@@ -10,6 +10,7 @@ import API from '../utils/api';
import { Condition, conditionalRegistration, requireConfiguration, requireMinVersion } from '../utils/dependentRegistration';
import { Disposable } from '../utils/dispose';
import { DocumentSelector } from '../utils/documentSelector';
import { LanguageDescription } from '../utils/languageDescription';
import * as typeConverters from '../utils/typeConverters';
class TagClosing extends Disposable {
@@ -156,12 +157,12 @@ function requireActiveDocument(
export function register(
selector: DocumentSelector,
modeId: string,
language: LanguageDescription,
client: ITypeScriptServiceClient,
) {
return conditionalRegistration([
requireMinVersion(client, TagClosing.minVersion),
requireConfiguration(modeId, 'autoClosingTags'),
requireConfiguration(language.id, 'autoClosingTags'),
requireActiveDocument(selector.syntax)
], () => new TagClosing(client));
}

View File

@@ -60,9 +60,9 @@ export default class LanguageProvider extends Disposable {
await Promise.all([
import('./languageFeatures/callHierarchy').then(provider => this._register(provider.register(selector, this.client))),
import('./languageFeatures/codeLens/implementationsCodeLens').then(provider => this._register(provider.register(selector, this.description.id, this.client, cachedResponse))),
import('./languageFeatures/codeLens/referencesCodeLens').then(provider => this._register(provider.register(selector, this.description.id, this.client, cachedResponse))),
import('./languageFeatures/completions').then(provider => this._register(provider.register(selector, this.description.id, this.client, this.typingsStatus, this.fileConfigurationManager, this.commandManager, this.telemetryReporter, this.onCompletionAccepted))),
import('./languageFeatures/codeLens/implementationsCodeLens').then(provider => this._register(provider.register(selector, this.description, this.client, cachedResponse))),
import('./languageFeatures/codeLens/referencesCodeLens').then(provider => this._register(provider.register(selector, this.description, this.client, cachedResponse))),
import('./languageFeatures/completions').then(provider => this._register(provider.register(selector, this.description, this.client, this.typingsStatus, this.fileConfigurationManager, this.commandManager, this.telemetryReporter, this.onCompletionAccepted))),
import('./languageFeatures/definitions').then(provider => this._register(provider.register(selector, this.client))),
import('./languageFeatures/directiveCommentCompletions').then(provider => this._register(provider.register(selector, this.client))),
import('./languageFeatures/documentHighlight').then(provider => this._register(provider.register(selector, this.client))),
@@ -70,10 +70,10 @@ export default class LanguageProvider extends Disposable {
import('./languageFeatures/fileReferences').then(provider => this._register(provider.register(this.client, this.commandManager))),
import('./languageFeatures/fixAll').then(provider => this._register(provider.register(selector, this.client, this.fileConfigurationManager, this.client.diagnosticsManager))),
import('./languageFeatures/folding').then(provider => this._register(provider.register(selector, this.client))),
import('./languageFeatures/formatting').then(provider => this._register(provider.register(selector, this.description.id, this.client, this.fileConfigurationManager))),
import('./languageFeatures/formatting').then(provider => this._register(provider.register(selector, this.description, this.client, this.fileConfigurationManager))),
import('./languageFeatures/hover').then(provider => this._register(provider.register(selector, this.client, this.fileConfigurationManager))),
import('./languageFeatures/implementations').then(provider => this._register(provider.register(selector, this.client))),
import('./languageFeatures/jsDocCompletions').then(provider => this._register(provider.register(selector, this.description.id, this.client, this.fileConfigurationManager))),
import('./languageFeatures/jsDocCompletions').then(provider => this._register(provider.register(selector, this.description, this.client, this.fileConfigurationManager))),
import('./languageFeatures/organizeImports').then(provider => this._register(provider.register(selector, this.client, this.commandManager, this.fileConfigurationManager, this.telemetryReporter))),
import('./languageFeatures/quickFix').then(provider => this._register(provider.register(selector, this.client, this.fileConfigurationManager, this.commandManager, this.client.diagnosticsManager, this.telemetryReporter))),
import('./languageFeatures/refactor').then(provider => this._register(provider.register(selector, this.client, this.fileConfigurationManager, this.commandManager, this.telemetryReporter))),
@@ -82,7 +82,7 @@ export default class LanguageProvider extends Disposable {
import('./languageFeatures/semanticTokens').then(provider => this._register(provider.register(selector, this.client))),
import('./languageFeatures/signatureHelp').then(provider => this._register(provider.register(selector, this.client))),
import('./languageFeatures/smartSelect').then(provider => this._register(provider.register(selector, this.client))),
import('./languageFeatures/tagClosing').then(provider => this._register(provider.register(selector, this.description.id, this.client))),
import('./languageFeatures/tagClosing').then(provider => this._register(provider.register(selector, this.description, this.client))),
import('./languageFeatures/typeDefinitions').then(provider => this._register(provider.register(selector, this.client))),
import('./languageFeatures/inlayHints').then(provider => this._register(provider.register(selector, this.description, this.client, this.fileConfigurationManager))),
]);

View File

@@ -84,12 +84,12 @@ export function requireMinVersion(
}
export function requireConfiguration(
language: string,
section: string,
configValue: string,
) {
return new Condition(
() => {
const config = vscode.workspace.getConfiguration(language, null);
const config = vscode.workspace.getConfiguration(section, null);
return !!config.get<boolean>(configValue);
},
vscode.workspace.onDidChangeConfiguration