Skip to content

Commit da5ed9d

Browse files
Mikhail Arkhipovericsnowcurrently
andauthored
Remove 'jediEnabled' in favor of languageServer (microsoft#11834)
* Fix path * Partial * Fix remaining settings * Keep names for now * Fix default * Restore names * Update url * NAmes * Formatting * Formatting * Test fixes * Test fixes * Test fixes * Linting test fixes * Linting tests * Unused var * Restore inspection * Add news * MErge issues * Merge issues * Wor around CI * Remove client reference * Use direct import in smoke tests * Fix smoke tests * Fix linter test * Avoid imports in smoke tests * PR feedback * Add jediEnabled/languageServer fixup with tests * Update LS type * Use json-parser for comments * Leave existing languageServer setting value alone * Update src/test/.vscode/settings.json Co-authored-by: Eric Snow <ericsnowcurrently@gmail.com> * PR feedback * Put test back Co-authored-by: Eric Snow <ericsnowcurrently@gmail.com>
1 parent 5289411 commit da5ed9d

39 files changed

Lines changed: 929 additions & 862 deletions

.github/ISSUE_TEMPLATE/1_ds_bug_report.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ _Please provide as much info as you readily know_
3333
- **Jupyter server running:** Local | Remote | N/A
3434
- **Extension version:** 20YY.MM.#####-xxx
3535
- **VS Code version:** #.##
36-
- **Setting python.jediEnabled:** true | false
36+
- **Setting python.languageServer:** Jedi | Microsoft | None
3737
- **Python and/or Anaconda version:** #.#.#
3838
- **OS:** Windows | Mac | Linux (distro):
3939
- **Virtual environment:** conda | venv | virtualenv | N/A | ...

.github/ISSUE_TEMPLATE/2_bug_report.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ labels: classify, type-bug
1515
- Type of virtual environment used (N/A | venv | virtualenv | conda | ...): XXX
1616
- Relevant/affected Python packages and their versions: XXX
1717
- Relevant/affected Python-related VS Code extensions and their versions: XXX
18-
- Jedi or Language Server? (i.e. what is `"python.jediEnabled"` set to; more info #3977): XXX
1918
- Value of the `python.languageServer` setting: XXX
2019

2120
## Expected behaviour

.github/release_plan.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
- [ ] Change the version in [`package.json`](https://github.com/Microsoft/vscode-python/blob/master/package.json) from a `-dev` suffix to `-rc` (🤖)
1212
- [ ] Run `npm install` to make sure [`package-lock.json`](https://github.com/Microsoft/vscode-python/blob/master/package.json) is up-to-date (🤖)
1313
- [ ] Update `requirements.txt` to point to latest release version of [ptvsd](https://github.com/microsoft/ptvsd).
14-
- [ ] Update `languageServerVersion` in `package.json` to point to the latest version (???) of [the Language Server](https://github.com/Microsoft/python-language-server).
14+
- [ ] Update `languageServerVersion` in `package.json` to point to the latest version of the [Language Server](https://github.com/Microsoft/python-language-server).
1515
- [ ] Update [`CHANGELOG.md`](https://github.com/Microsoft/vscode-python/blob/master/CHANGELOG.md) (🤖)
1616
- [ ] Run [`news`](https://github.com/Microsoft/vscode-python/tree/master/news) (typically `python news --final --update CHANGELOG.md | code-insiders -`)
1717
- [ ] Copy over the "Thanks" section from the previous release

.vscode/settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
"source.fixAll.eslint": true,
4646
"source.fixAll.tslint": true
4747
},
48-
"python.jediEnabled": false,
48+
"python.languageServer": "Microsoft",
4949
"python.analysis.logLevel": "Trace",
5050
"python.analysis.downloadChannel": "beta",
5151
"python.linting.pylintEnabled": false,

news/.vscode/settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"python.jediEnabled": false,
2+
"python.languageServer": "Microsoft",
33
"python.formatting.provider": "black",
44
"editor.formatOnSave": true,
55
"python.testing.pytestArgs": ["."],

news/1 Enhancements/7010.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Removed `python.jediEnabled` setting in favor of `python.languageServer`. Instead of `"python.jediEnabled": true` please use `"python.languageServer": "Jedi"`.

news/1 Enhancements/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
Changes that add new features.
2+

package.json

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2121,12 +2121,6 @@
21212121
"description": "Whether to install Python modules globally when not using an environment.",
21222122
"scope": "resource"
21232123
},
2124-
"python.jediEnabled": {
2125-
"type": "boolean",
2126-
"default": true,
2127-
"description": "Enables Jedi as IntelliSense engine instead of Microsoft Python Analysis Engine.",
2128-
"scope": "resource"
2129-
},
21302124
"python.jediMemoryLimit": {
21312125
"type": "number",
21322126
"default": 0,

src/client/activation/activationService.ts

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import {
3535
LanguageServerType
3636
} from './types';
3737

38-
const jediEnabledSetting: keyof IPythonSettings = 'jediEnabled';
3938
const languageServerSetting: keyof IPythonSettings = 'languageServer';
4039
const workspacePathNameForGlobalWorkspaces = '';
4140

@@ -130,32 +129,37 @@ export class LanguageServerExtensionActivationService
130129
}
131130
}
132131
@swallowExceptions('Send telemetry for Language Server current selection')
133-
public async sendTelemetryForChosenLanguageServer(jediEnabled: boolean): Promise<void> {
134-
const state = this.stateFactory.createGlobalPersistentState<boolean | undefined>('SWITCH_LS', undefined);
135-
if (typeof state.value !== 'boolean') {
136-
await state.updateValue(jediEnabled);
132+
public async sendTelemetryForChosenLanguageServer(languageServer: LanguageServerType): Promise<void> {
133+
const state = this.stateFactory.createGlobalPersistentState<LanguageServerType | undefined>(
134+
'SWITCH_LS',
135+
undefined
136+
);
137+
if (typeof state.value !== 'string') {
138+
await state.updateValue(languageServer);
137139
}
138-
if (state.value !== jediEnabled) {
139-
await state.updateValue(jediEnabled);
140+
if (state.value !== languageServer) {
141+
await state.updateValue(languageServer);
140142
sendTelemetryEvent(EventName.PYTHON_LANGUAGE_SERVER_CURRENT_SELECTION, undefined, {
141-
switchTo: jediEnabled
143+
switchTo: languageServer
142144
});
143145
} else {
144146
sendTelemetryEvent(EventName.PYTHON_LANGUAGE_SERVER_CURRENT_SELECTION, undefined, {
145-
lsStartup: jediEnabled
147+
lsStartup: languageServer
146148
});
147149
}
148150
}
149151

150152
/**
151-
* Checks if user has not manually set `jediEnabled` setting
153+
* Checks if user does not have any `languageServer` setting set.
152154
* @param resource
153-
* @returns `true` if user has NOT manually added the setting and is using default configuration, `false` if user has `jediEnabled` setting added
155+
* @returns `true` if user is using default configuration, `false` if user has `languageServer` setting added.
154156
*/
155157
public isJediUsingDefaultConfiguration(resource: Resource): boolean {
156-
const settings = this.workspaceService.getConfiguration('python', resource).inspect<boolean>('jediEnabled');
158+
const settings = this.workspaceService
159+
.getConfiguration('python', resource)
160+
.inspect<LanguageServerType>('languageServer');
157161
if (!settings) {
158-
traceError('WorkspaceConfiguration.inspect returns `undefined` for setting `python.jediEnabled`');
162+
traceError('WorkspaceConfiguration.inspect returns `undefined` for setting `python.languageServer`');
159163
return false;
160164
}
161165
return (
@@ -170,19 +174,21 @@ export class LanguageServerExtensionActivationService
170174
* @returns `true` if user is using jedi, `false` if user is using language server
171175
*/
172176
public useJedi(): boolean {
177+
// Check if `languageServer` setting is missing (default configuration).
173178
if (this.isJediUsingDefaultConfiguration(this.resource)) {
179+
// If user is assigned to an experiment (i.e. use LS), return false.
174180
if (this.abExperiments.inExperiment(LSEnabled)) {
175181
return false;
176182
}
177183
// Send telemetry if user is in control group
178184
this.abExperiments.sendTelemetryIfInExperiment(LSControl);
185+
return true; // Do use Jedi as it is default.
179186
}
187+
// Configuration is non-default, so `languageServer` should be present.
180188
const configurationService = this.serviceContainer.get<IConfigurationService>(IConfigurationService);
181-
let enabled = configurationService.getSettings(this.resource).jediEnabled;
182-
const languageServerType = configurationService.getSettings(this.resource).languageServer;
183-
enabled = enabled || languageServerType === LanguageServerType.Jedi;
184-
this.sendTelemetryForChosenLanguageServer(enabled).ignoreErrors();
185-
return enabled;
189+
const lstType = configurationService.getSettings(this.resource).languageServer;
190+
this.sendTelemetryForChosenLanguageServer(lstType).ignoreErrors();
191+
return lstType === LanguageServerType.Jedi;
186192
}
187193

188194
protected async onWorkspaceFoldersChanged() {
@@ -296,7 +302,6 @@ export class LanguageServerExtensionActivationService
296302
? this.workspaceService.workspaceFolders!.map((workspace) => workspace.uri)
297303
: [undefined];
298304
if (
299-
workspacesUris.findIndex((uri) => event.affectsConfiguration(`python.${jediEnabledSetting}`, uri)) === -1 &&
300305
workspacesUris.findIndex((uri) => event.affectsConfiguration(`python.${languageServerSetting}`, uri)) === -1
301306
) {
302307
return;

src/client/activation/languageServer/languageServerFolderService.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,23 @@ import { inject, injectable } from 'inversify';
77
import { IApplicationEnvironment } from '../../common/application/types';
88
import { IServiceContainer } from '../../ioc/types';
99
import { LanguageServerFolderService } from '../common/languageServerFolderService';
10+
import { DotNetLanguageServerFolder } from '../types';
11+
12+
// Must match languageServerVersion* keys in package.json
13+
const DotNetLanguageServerMinVersionKey = 'languageServerVersion';
1014

1115
@injectable()
1216
export class DotNetLanguageServerFolderService extends LanguageServerFolderService {
1317
constructor(@inject(IServiceContainer) serviceContainer: IServiceContainer) {
14-
super(serviceContainer, 'languageServer');
18+
super(serviceContainer, DotNetLanguageServerFolder);
1519
}
1620

1721
protected getMinimalLanguageServerVersion(): string {
1822
let minVersion = '0.0.0';
1923
try {
2024
const appEnv = this.serviceContainer.get<IApplicationEnvironment>(IApplicationEnvironment);
2125
if (appEnv) {
22-
minVersion = appEnv.packageJson.languageServerVersion as string;
26+
minVersion = appEnv.packageJson[DotNetLanguageServerMinVersionKey] as string;
2327
}
2428
// tslint:disable-next-line: no-empty
2529
} catch {}

0 commit comments

Comments
 (0)