Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds lang service switch #18034

Closed
Closed
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions localization/xliff/vscode-mssql.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -1142,6 +1142,9 @@
<trans-unit id="mssql.format.placeSelectStatementReferencesOnNewLine">
<source xml:lang="en">Should references to objects in a select statements be split into separate lines? E.g. for &apos;SELECT C1, C2 FROM T1&apos; both C1 and C2 will be on separate lines</source>
</trans-unit>
<trans-unit id="mssql.intelliSense.defaultQueryEditorLanguageToNone">
<source xml:lang="en">Should the default editor language be set to None when a query editor is opened.</source>
</trans-unit>
<trans-unit id="mssql.startQueryHistoryCapture">
<source xml:lang="en">Start Query History Capture</source>
</trans-unit>
Expand Down
6 changes: 6 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -1197,6 +1197,12 @@
"description": "%mssql.intelliSense.lowerCaseSuggestions%",
"scope": "window"
},
"mssql.intelliSense.defaultQueryEditorLanguageToNone": {
"type": "boolean",
"default": false,
"description": "%mssql.intelliSense.defaultQueryEditorLanguageToNone%",
"scope": "window"
},
"mssql.persistQueryResultTabs": {
"type": "boolean",
"default": false,
Expand Down
1 change: 1 addition & 0 deletions package.nls.json
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@
"mssql.enableQueryHistoryFeature":"Should Query History feature be enabled",
"mssql.intelliSense.lowerCaseSuggestions":"Should IntelliSense suggestions be lowercase",
"mssql.persistQueryResultTabs":"Should query result selections and scroll positions be saved when switching tabs (may impact performance)",
"mssql.intelliSense.defaultQueryEditorLanguageToNone":"Should the default editor language be set to None when a query editor is opened.",
"mssql.queryHistoryLimit":"Number of query history entries to show in the Query History view",
"mssql.createAzureFunction":"Create Azure Function with SQL binding",
"mssql.query.maxXmlCharsToStore":"Maximum number of characters to store for each value in XML columns after running a query. Default value: 2,097,152. Valid value range: 1 to 2,147,483,647.",
Expand Down
1 change: 1 addition & 0 deletions src/constants/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ export const configQueryHistoryLimit = 'queryHistoryLimit';
export const configEnableQueryHistoryCapture = 'enableQueryHistoryCapture';
export const configEnableQueryHistoryFeature = 'enableQueryHistoryFeature';
export const configEnableExperimentalFeatures = 'mssql.enableExperimentalFeatures';
export const configIntelliSense = 'intelliSense';

// ToolsService Constants
export const serviceInstallingTo = 'Installing SQL tools service to';
Expand Down
19 changes: 16 additions & 3 deletions src/controllers/connectionManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import { IAccount } from '../models/contracts/azure';
import * as ConnectionContracts from '../models/contracts/connection';
import { ClearPooledConnectionsRequest, ConnectionSummary } from '../models/contracts/connection';
import * as LanguageServiceContracts from '../models/contracts/languageService';
import { EncryptOptions, IConnectionProfile } from '../models/interfaces';
import { EncryptOptions, IConnectionProfile, IntelliSenseConfig } from '../models/interfaces';
import { PlatformInformation, Runtime } from '../models/platform';
import * as Utils from '../models/utils';
import { IPrompter, IQuestion, QuestionTypes } from '../prompts/question';
Expand Down Expand Up @@ -872,9 +872,22 @@ export default class ConnectionManager {

// Note: must call flavor changed before connecting, or the timer showing an animation doesn't occur
if (this.statusView) {
this.statusView.languageFlavorChanged(fileUri, Constants.mssqlProviderName);
const configuration = vscode.workspace.getConfiguration(Constants.extensionConfigSectionName);
const intelliSenseConfig = configuration.get<IntelliSenseConfig>(Constants.configIntelliSense);
const flavor = intelliSenseConfig.defaultQueryEditorLanguageToNone ? Constants.noneProviderName : Constants.mssqlProviderName;
this.statusView.languageFlavorChanged(fileUri, flavor);
this.statusView.connecting(fileUri, connectionCreds);
this.statusView.languageFlavorChanged(fileUri, Constants.mssqlProviderName);
this.statusView.languageFlavorChanged(fileUri, flavor);

// Notify the language service that the editor with the specified URI doesn't have a language flavor to avoid error squiggles
if (flavor === Constants.noneProviderName) {
SqlToolsServerClient.instance.sendNotification(LanguageServiceContracts.LanguageFlavorChangedNotification.type,
<LanguageServiceContracts.DidChangeLanguageFlavorParams>{
uri: fileUri,
language: 'sql',
flavor: Constants.noneProviderName
});
}
}
this.vscodeWrapper.logToOutputChannel(
LocalizedConstants.msgConnecting(connectionCreds.server, fileUri)
Expand Down
19 changes: 16 additions & 3 deletions src/controllers/mainController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import * as Constants from '../constants/constants';
import * as LocalizedConstants from '../constants/locConstants';
import SqlToolsServerClient from '../languageservice/serviceclient';
import * as ConnInfo from '../models/connectionInfo';
import { CompletionExtensionParams, CompletionExtLoadRequest, RebuildIntelliSenseNotification } from '../models/contracts/languageService';
import { CompletionExtensionParams, CompletionExtLoadRequest, DidChangeLanguageFlavorParams, LanguageFlavorChangedNotification, RebuildIntelliSenseNotification } from '../models/contracts/languageService';
import { ScriptOperation } from '../models/contracts/scripting/scriptingRequest';
import { SqlOutputContentProvider } from '../models/sqlOutputContentProvider';
import * as Utils from '../models/utils';
Expand All @@ -35,7 +35,7 @@ import { SqlProjectsService } from '../services/sqlProjectsService';
import { SchemaCompareService } from '../services/schemaCompareService';
import { SqlTasksService } from '../services/sqlTasksService';
import StatusView from '../views/statusView';
import { IConnectionProfile, ISelectionData } from './../models/interfaces';
import { IConnectionProfile, IntelliSenseConfig, ISelectionData } from './../models/interfaces';
import ConnectionManager from './connectionManager';
import UntitledSqlDocumentService from './untitledSqlDocumentService';
import VscodeWrapper from './vscodeWrapper';
Expand Down Expand Up @@ -1288,8 +1288,21 @@ export default class MainController implements vscode.Disposable {
this._connectionMgr.onDidOpenTextDocument(doc);

if (doc && doc.languageId === Constants.languageId) {
const configuration = vscode.workspace.getConfiguration(Constants.extensionConfigSectionName);
const intelliSenseConfig = configuration.get<IntelliSenseConfig>(Constants.configIntelliSense);
const flavor = intelliSenseConfig.defaultQueryEditorLanguageToNone ? Constants.noneProviderName : Constants.mssqlProviderName;
// set encoding to false
this._statusview.languageFlavorChanged(doc.uri.toString(true), Constants.mssqlProviderName);
this._statusview.languageFlavorChanged(doc.uri.toString(true), flavor);

// Notify the language service that the editor with the specified URI doesn't have a language flavor to avoid error squiggles.
if (flavor === Constants.noneProviderName) {
SqlToolsServerClient.instance.sendNotification(LanguageFlavorChangedNotification.type,
<DidChangeLanguageFlavorParams>{
uri: doc.uri.toString(true),
language: 'sql',
flavor: Constants.noneProviderName
});
}
}

if (doc && doc.languageId === Constants.sqlPlanLanguageId) {
Expand Down
4 changes: 4 additions & 0 deletions src/models/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ import * as vscodeMssql from 'vscode-mssql';
import { AzureAuthType } from './contracts/azure';

// interfaces
export interface IntelliSenseConfig {
defaultQueryEditorLanguageToNone: boolean;
}

export enum ContentType {
Root = 0,
Messages = 1,
Expand Down
Loading