Skip to content

Commit

Permalink
Remove autoAddFileAssociations setting and persist the document langu…
Browse files Browse the repository at this point in the history
…age of a file if goto def or FAR is used.
  • Loading branch information
browntarik committed Sep 5, 2024
1 parent 93a20bc commit 6f64776
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 21 deletions.
54 changes: 39 additions & 15 deletions Extension/src/LanguageServer/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ import { DataBinding } from './dataBinding';
import { cachedEditorConfigSettings, getEditorConfigSettings } from './editorConfig';
import { CppSourceStr, clients, configPrefix, updateLanguageConfigurations, usesCrashHandler, watchForCrashes } from './extension';
import { LocalizeStringParams, getLocaleId, getLocalizedString } from './localization';
import { PersistentFolderState, PersistentWorkspaceState } from './persistentState';
import { PersistentFolderState, PersistentState, PersistentWorkspaceState } from './persistentState';
import { createProtocolFilter } from './protocolFilter';
import * as refs from './references';
import { CppSettings, OtherSettings, SettingsParams, WorkspaceFolderSettingsParams } from './settings';
Expand Down Expand Up @@ -277,6 +277,11 @@ interface IntelliSenseDiagnostic {
relatedInformation?: IntelliSenseDiagnosticRelatedInformation[];
}

interface textDocumentLanguageInformation{

Check failure on line 280 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Interface name `textDocumentLanguageInformation` must match one of the following formats: PascalCase

Check failure on line 280 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Interface name `textDocumentLanguageInformation` must match one of the following formats: PascalCase

Check failure on line 280 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Interface name `textDocumentLanguageInformation` must match one of the following formats: PascalCase
uri: string;
languageId: string;
}

interface RefactorDiagnostic {
range: Range;
code?: number;
Expand Down Expand Up @@ -472,6 +477,7 @@ interface SetTemporaryTextDocumentLanguageParams {
uri: string;
isC: boolean;
isCuda: boolean;
isPersistent: boolean;
}

enum CodeAnalysisScope {
Expand Down Expand Up @@ -610,7 +616,6 @@ const RequestCustomConfig: NotificationType<string> = new NotificationType<strin
const PublishRefactorDiagnosticsNotification: NotificationType<PublishRefactorDiagnosticsParams> = new NotificationType<PublishRefactorDiagnosticsParams>('cpptools/publishRefactorDiagnostics');
const ShowMessageWindowNotification: NotificationType<ShowMessageWindowParams> = new NotificationType<ShowMessageWindowParams>('cpptools/showMessageWindow');
const ShowWarningNotification: NotificationType<ShowWarningParams> = new NotificationType<ShowWarningParams>('cpptools/showWarning');
const ReportTextDocumentLanguage: NotificationType<string> = new NotificationType<string>('cpptools/reportTextDocumentLanguage');
const IntelliSenseSetupNotification: NotificationType<IntelliSenseSetup> = new NotificationType<IntelliSenseSetup>('cpptools/IntelliSenseSetup');
const SetTemporaryTextDocumentLanguageNotification: NotificationType<SetTemporaryTextDocumentLanguageParams> = new NotificationType<SetTemporaryTextDocumentLanguageParams>('cpptools/setTemporaryTextDocumentLanguage');
const ReportCodeAnalysisProcessedNotification: NotificationType<number> = new NotificationType<number>('cpptools/reportCodeAnalysisProcessed');
Expand Down Expand Up @@ -1758,9 +1763,20 @@ export class DefaultClient implements Client {
}
}

public onDidOpenTextDocument(document: vscode.TextDocument): void {
public async onDidOpenTextDocument(document: vscode.TextDocument): Promise<void> {

Check failure on line 1767 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Trailing spaces not allowed

Check failure on line 1767 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Trailing spaces not allowed

Check failure on line 1767 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Trailing spaces not allowed
if (document.uri.scheme === "file") {
console.log(document.languageId);
const uri: string = document.uri.toString();
const textDocumentLanguagePersistentState: PersistentState<textDocumentLanguageInformation | undefined> = new PersistentState<textDocumentLanguageInformation | undefined>("CPP.textDocumentLanguage", undefined);
const persistentLanguage: string | undefined = textDocumentLanguagePersistentState.Value?.languageId;
const persistentFile: string | undefined = textDocumentLanguagePersistentState.Value?.uri;

Check failure on line 1773 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Multiple spaces found before '='

Check failure on line 1773 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Multiple spaces found before '='

Check failure on line 1773 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Multiple spaces found before '='

if (persistentFile == uri && persistentLanguage) {

Check failure on line 1775 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Expected '===' and instead saw '=='

Check failure on line 1775 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Expected '===' and instead saw '=='

Check failure on line 1775 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Expected '===' and instead saw '=='
await vscode.languages.setTextDocumentLanguage(document, persistentLanguage);

}

openFileVersions.set(uri, document.version);
void SessionState.buildAndDebugIsSourceFile.set(util.isCppOrCFile(document.uri));
void SessionState.buildAndDebugIsFolderOpen.set(util.isFolderOpen(document.uri));
Expand All @@ -1771,6 +1787,14 @@ export class DefaultClient implements Client {

public onDidCloseTextDocument(document: vscode.TextDocument): void {
const uri: string = document.uri.toString();
const textDocumentLanguagePersistentState: PersistentState<textDocumentLanguageInformation | undefined> = new PersistentState<textDocumentLanguageInformation | undefined>("CPP.textDocumentLanguage", undefined);
const persistentFile: string | undefined = textDocumentLanguagePersistentState.Value?.uri;

Check failure on line 1791 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Multiple spaces found before '='

Check failure on line 1791 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Multiple spaces found before '='

Check failure on line 1791 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Multiple spaces found before '='
const persistentLanguage: string | undefined = textDocumentLanguagePersistentState.Value?.languageId;
console.log(document.languageId);
// If the file being closed has changed its language from the one we have stored, clear the stored language.
if (persistentFile == uri && persistentLanguage !== document.languageId) {

Check failure on line 1795 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Expected '===' and instead saw '=='

Check failure on line 1795 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Expected '===' and instead saw '=='

Check failure on line 1795 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Expected '===' and instead saw '=='
textDocumentLanguagePersistentState.Value = undefined;
}
if (this.semanticTokensProvider) {
this.semanticTokensProvider.removeFile(uri);
}
Expand Down Expand Up @@ -2365,7 +2389,6 @@ export class DefaultClient implements Client {
RegisterCodeAnalysisNotifications(this.languageClient);
this.languageClient.onNotification(ShowMessageWindowNotification, showMessageWindow);
this.languageClient.onNotification(ShowWarningNotification, showWarning);
this.languageClient.onNotification(ReportTextDocumentLanguage, (e) => this.setTextDocumentLanguage(e));
this.languageClient.onNotification(IntelliSenseSetupNotification, (e) => this.logIntelliSenseSetupTime(e));
this.languageClient.onNotification(SetTemporaryTextDocumentLanguageNotification, (e) => void this.setTemporaryTextDocumentLanguage(e));
this.languageClient.onNotification(ReportCodeAnalysisProcessedNotification, (e) => this.updateCodeAnalysisProcessed(e));
Expand Down Expand Up @@ -2426,23 +2449,24 @@ export class DefaultClient implements Client {
diagnosticsCollectionIntelliSense.set(realUri, diagnosticsIntelliSense);

clients.timeTelemetryCollector.setUpdateRangeTime(realUri);
}

private setTextDocumentLanguage(languageStr: string): void {
const cppSettings: CppSettings = new CppSettings();
if (cppSettings.autoAddFileAssociations) {
const is_c: boolean = languageStr.startsWith("c;");
const is_cuda: boolean = languageStr.startsWith("cu;");
languageStr = languageStr.substring(is_c ? 2 : is_cuda ? 3 : 1);
this.addFileAssociations(languageStr, is_c ? "c" : is_cuda ? "cuda-cpp" : "cpp");
}
}
}

Check failure on line 2452 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Trailing spaces not allowed

Check failure on line 2452 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Trailing spaces not allowed

Check failure on line 2452 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Trailing spaces not allowed

private async setTemporaryTextDocumentLanguage(params: SetTemporaryTextDocumentLanguageParams): Promise<void> {
const languageId: string = params.isC ? "c" : params.isCuda ? "cuda-cpp" : "cpp";
const uri: vscode.Uri = vscode.Uri.parse(params.uri);

const client: Client = clients.getClientFor(uri);
const document: vscode.TextDocument | undefined = client.TrackedDocuments.get(params.uri);
if (params.isPersistent){

Check failure on line 2460 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Missing space before opening brace

Check failure on line 2460 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Missing space before opening brace

Check failure on line 2460 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Missing space before opening brace
let textDocumentLanguagePersistentState: PersistentState<textDocumentLanguageInformation | undefined> = new PersistentState<textDocumentLanguageInformation | undefined>("CPP.textDocumentLanguage", undefined);

Check failure on line 2461 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

'textDocumentLanguagePersistentState' is never reassigned. Use 'const' instead

Check failure on line 2461 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

'textDocumentLanguagePersistentState' is never reassigned. Use 'const' instead

Check failure on line 2461 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

'textDocumentLanguagePersistentState' is never reassigned. Use 'const' instead
textDocumentLanguagePersistentState.Value = undefined;
const doc: vscode.TextDocument | undefined = await vscode.workspace.openTextDocument(params.uri);
await vscode.languages.setTextDocumentLanguage(doc, languageId);
console.log(textDocumentLanguagePersistentState.Value);
if (!textDocumentLanguagePersistentState.Value){

Check failure on line 2466 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Missing space before opening brace

Check failure on line 2466 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Missing space before opening brace

Check failure on line 2466 in Extension/src/LanguageServer/client.ts

View workflow job for this annotation

GitHub Actions / job / build

Missing space before opening brace
textDocumentLanguagePersistentState.Value = {uri: doc.uri.toString(), languageId: languageId};
}
}
if (!!document && document.languageId !== languageId) {
if (document.languageId === "cpp" && languageId === "c") {
handleChangedFromCppToC(document);
Expand Down
1 change: 0 additions & 1 deletion Extension/src/LanguageServer/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,6 @@ export class CppSettings extends Settings {
public get autocomplete(): string { return this.getAsString("autocomplete"); }
public get autocompleteAddParentheses(): boolean { return this.getAsBoolean("autocompleteAddParentheses"); }
public get loggingLevel(): string { return this.getAsString("loggingLevel"); }
public get autoAddFileAssociations(): boolean { return this.getAsBoolean("autoAddFileAssociations"); }
public get workspaceParsingPriority(): string { return this.getAsString("workspaceParsingPriority"); }
public get workspaceSymbols(): string { return this.getAsString("workspaceSymbols"); }
public get exclusionPolicy(): string { return this.getAsString("exclusionPolicy"); }
Expand Down
6 changes: 1 addition & 5 deletions Extension/src/LanguageServer/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import * as vscode from 'vscode';
import { Range } from 'vscode-languageclient';
import { SessionState } from '../sessionState';
import { Location, TextEdit } from './commonTypes';
import { CppSettings } from './settings';

export function makeLspRange(vscRange: vscode.Range): Range {
return {
Expand Down Expand Up @@ -37,10 +36,7 @@ export function rangeEquals(range1: vscode.Range | Range, range2: vscode.Range |
// Check this before attempting to switch a document from C to C++.
export function shouldChangeFromCToCpp(document: vscode.TextDocument): boolean {
if (document.fileName.endsWith(".C") || document.fileName.endsWith(".H")) {
const cppSettings: CppSettings = new CppSettings();
if (cppSettings.autoAddFileAssociations) {
return !docsChangedFromCppToC.has(document.fileName);
}
return !docsChangedFromCppToC.has(document.fileName);
// We could potentially add a new setting to enable switching to cpp even when files.associations isn't changed.
}
return false;
Expand Down

0 comments on commit 6f64776

Please sign in to comment.