Skip to content

Commit f753af1

Browse files
authored
Get eslint and Prettier to play nicely with each other (#14927)
1 parent d642135 commit f753af1

24 files changed

+310
-235
lines changed

.eslintrc

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,16 @@
4040
"no-useless-constructor": "off",
4141
"@typescript-eslint/no-useless-constructor": "error",
4242
"@typescript-eslint/no-var-requires": "off",
43+
// Overriding formatting rules to let Prettier handle them
44+
"comma-dangle": "off",
45+
"function-paren-newline": "off",
46+
"implicit-arrow-linebreak": "off",
47+
"indent": "off",
48+
"max-len": "off",
49+
"object-curly-newline": ["error", {"ImportDeclaration": {"consistent": true}}],
50+
"operator-linebreak": "off",
4351
// Other rules
52+
"class-methods-use-this": ["error", {"exceptMethods": ["dispose"]}],
4453
"func-names": "off",
4554
"import/extensions": "off",
4655
"import/namespace": "off",
@@ -52,24 +61,7 @@
5261
}
5362
],
5463
"import/prefer-default-export": "off",
55-
"indent": [
56-
"error",
57-
4,
58-
{
59-
"SwitchCase": 1
60-
}
61-
],
6264
"linebreak-style": "off",
63-
"max-len": [
64-
"warn",
65-
{
66-
"code": 120,
67-
"ignorePattern": "^import\\s.+\\sfrom\\s.+;$",
68-
"ignoreStrings": true,
69-
"ignoreTemplateLiterals": true,
70-
"ignoreUrls": true
71-
}
72-
],
7365
"no-await-in-loop": "off",
7466
"no-confusing-arrow": [
7567
"error",

src/client/activation/jedi/languageServerProxy.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,15 @@ import { ILanguageClientFactory, ILanguageServerProxy } from '../types';
3030
@injectable()
3131
export class JediLanguageServerProxy implements ILanguageServerProxy {
3232
public languageClient: LanguageClient | undefined;
33+
3334
private startupCompleted: Deferred<void>;
35+
3436
private cancellationStrategy: FileBasedCancellationStrategy | undefined;
37+
3538
private readonly disposables: Disposable[] = [];
36-
private disposed: boolean = false;
39+
40+
private disposed = false;
41+
3742
private lsVersion: string | undefined;
3843

3944
constructor(
@@ -53,7 +58,7 @@ export class JediLanguageServerProxy implements ILanguageServerProxy {
5358
}
5459

5560
@traceDecorators.verbose('Stopping language server')
56-
public dispose() {
61+
public dispose(): void {
5762
if (this.languageClient) {
5863
// Do not await on this.
5964
this.languageClient.stop().then(noop, (ex) => traceError('Stopping language client failed', ex));
@@ -120,8 +125,10 @@ export class JediLanguageServerProxy implements ILanguageServerProxy {
120125
}
121126
}
122127

123-
// tslint:disable-next-line: no-empty
124-
public loadExtension(_args?: {}) {}
128+
// eslint-disable-next-line class-methods-use-this
129+
public loadExtension(): void {
130+
// No body.
131+
}
125132

126133
@captureTelemetry(
127134
EventName.LANGUAGE_SERVER_READY,
@@ -141,7 +148,7 @@ export class JediLanguageServerProxy implements ILanguageServerProxy {
141148
}
142149

143150
@swallowExceptions('Activating Unit Tests Manager for Jedi language server')
144-
protected async registerTestServices() {
151+
protected async registerTestServices(): Promise<void> {
145152
if (!this.languageClient) {
146153
throw new Error('languageClient not initialized');
147154
}

src/client/activation/jedi/manager.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,17 @@ import {
2727
@injectable()
2828
export class JediLanguageServerManager implements ILanguageServerManager {
2929
private languageServerProxy?: ILanguageServerProxy;
30+
3031
private resource!: Resource;
32+
3133
private interpreter: PythonEnvironment | undefined;
34+
3235
private middleware: LanguageClientMiddleware | undefined;
36+
3337
private disposables: IDisposable[] = [];
34-
private connected: boolean = false;
38+
39+
private connected = false;
40+
3541
private lsVersion: string | undefined;
3642

3743
constructor(
@@ -54,14 +60,14 @@ export class JediLanguageServerManager implements ILanguageServerManager {
5460
};
5561
}
5662

57-
public dispose() {
63+
public dispose(): void {
5864
if (this.languageProxy) {
5965
this.languageProxy.dispose();
6066
}
6167
this.disposables.forEach((d) => d.dispose());
6268
}
6369

64-
public get languageProxy() {
70+
public get languageProxy(): ILanguageServerProxy | undefined {
6571
return this.languageServerProxy;
6672
}
6773

@@ -80,6 +86,7 @@ export class JediLanguageServerManager implements ILanguageServerManager {
8086
// Search using a regex in the text
8187
const match = /jedi-language-server==([0-9\.]*)/.exec(requirementsTxt);
8288
if (match && match.length > 1) {
89+
// eslint-disable-next-line prefer-destructuring
8390
this.lsVersion = match[1];
8491
} else {
8592
this.lsVersion = '0.19.3';
@@ -89,12 +96,12 @@ export class JediLanguageServerManager implements ILanguageServerManager {
8996
await this.startLanguageServer();
9097
}
9198

92-
public connect() {
99+
public connect(): void {
93100
this.connected = true;
94101
this.middleware?.connect();
95102
}
96103

97-
public disconnect() {
104+
public disconnect(): void {
98105
this.connected = false;
99106
this.middleware?.disconnect();
100107
}
@@ -125,12 +132,13 @@ export class JediLanguageServerManager implements ILanguageServerManager {
125132
this.languageServerProxy = this.serviceContainer.get<ILanguageServerProxy>(ILanguageServerProxy);
126133

127134
const options = await this.analysisOptions.getAnalysisOptions();
128-
options.middleware = this.middleware = new LanguageClientMiddleware(
135+
this.middleware = new LanguageClientMiddleware(
129136
this.serviceContainer,
130137
LanguageServerType.Jedi,
131138
() => this.languageServerProxy?.languageClient,
132139
this.lsVersion
133140
);
141+
options.middleware = this.middleware;
134142

135143
// Make sure the middleware is connected if we restart and we we're already connected.
136144
if (this.connected) {

src/client/activation/jedi/multiplexingActivator.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
SignatureHelpContext,
1212
TextDocument
1313
} from 'vscode';
14+
import { ServerCapabilities } from 'vscode-languageserver-protocol';
1415
// tslint:disable-next-line: import-name
1516
import { IWorkspaceService } from '../../common/application/types';
1617
import { isTestExecution } from '../../common/constants';
@@ -26,7 +27,7 @@ import {
2627
import { IServiceManager } from '../../ioc/types';
2728
import { PythonEnvironment } from '../../pythonEnvironments/info';
2829
import { JediExtensionActivator } from '../jedi';
29-
import { ILanguageServerActivator, ILanguageServerManager } from '../types';
30+
import { ILanguageServerActivator, ILanguageServerConnection, ILanguageServerManager } from '../types';
3031
import { JediLanguageServerActivator } from './activator';
3132

3233
/**
@@ -40,7 +41,9 @@ import { JediLanguageServerActivator } from './activator';
4041
@injectable()
4142
export class MultiplexingJediLanguageServerActivator implements ILanguageServerActivator {
4243
private realLanguageServerPromise: Promise<ILanguageServerActivator>;
44+
4345
private realLanguageServer: ILanguageServerActivator | undefined;
46+
4447
private onDidChangeCodeLensesEmitter = new EventEmitter<void>();
4548

4649
constructor(
@@ -64,37 +67,43 @@ export class MultiplexingJediLanguageServerActivator implements ILanguageServerA
6467
return this.realLanguageServer;
6568
});
6669
}
70+
6771
public async start(resource: Resource, interpreter: PythonEnvironment | undefined): Promise<void> {
6872
const realServer = await this.realLanguageServerPromise;
6973
if (!isTestExecution()) {
7074
this.proposePylancePopup.showBanner().ignoreErrors();
7175
}
7276
return realServer.start(resource, interpreter);
7377
}
78+
7479
public activate(): void {
7580
if (this.realLanguageServer) {
7681
this.realLanguageServer.activate();
7782
}
7883
}
84+
7985
public deactivate(): void {
8086
if (this.realLanguageServer) {
8187
this.realLanguageServer.deactivate();
8288
}
8389
}
90+
8491
public get onDidChangeCodeLenses(): Event<void> {
8592
return this.onDidChangeCodeLensesEmitter.event;
8693
}
8794

88-
public get connection() {
95+
public get connection(): ILanguageServerConnection | undefined {
8996
if (this.realLanguageServer) {
9097
return this.realLanguageServer.connection;
9198
}
99+
return undefined;
92100
}
93101

94-
public get capabilities() {
102+
public get capabilities(): ServerCapabilities | undefined {
95103
if (this.realLanguageServer) {
96104
return this.realLanguageServer.capabilities;
97105
}
106+
return undefined;
98107
}
99108

100109
public async provideRenameEdits(
@@ -106,14 +115,17 @@ export class MultiplexingJediLanguageServerActivator implements ILanguageServerA
106115
const server = await this.realLanguageServerPromise;
107116
return server.provideRenameEdits(document, position, newName, token);
108117
}
118+
109119
public async provideDefinition(document: TextDocument, position: Position, token: CancellationToken) {
110120
const server = await this.realLanguageServerPromise;
111121
return server.provideDefinition(document, position, token);
112122
}
123+
113124
public async provideHover(document: TextDocument, position: Position, token: CancellationToken) {
114125
const server = await this.realLanguageServerPromise;
115126
return server.provideHover(document, position, token);
116127
}
128+
117129
public async provideReferences(
118130
document: TextDocument,
119131
position: Position,
@@ -123,6 +135,7 @@ export class MultiplexingJediLanguageServerActivator implements ILanguageServerA
123135
const server = await this.realLanguageServerPromise;
124136
return server.provideReferences(document, position, context, token);
125137
}
138+
126139
public async provideCompletionItems(
127140
document: TextDocument,
128141
position: Position,
@@ -132,14 +145,17 @@ export class MultiplexingJediLanguageServerActivator implements ILanguageServerA
132145
const server = await this.realLanguageServerPromise;
133146
return server.provideCompletionItems(document, position, token, context);
134147
}
148+
135149
public async provideCodeLenses(document: TextDocument, token: CancellationToken) {
136150
const server = await this.realLanguageServerPromise;
137151
return server.provideCodeLenses(document, token);
138152
}
153+
139154
public async provideDocumentSymbols(document: TextDocument, token: CancellationToken) {
140155
const server = await this.realLanguageServerPromise;
141156
return server.provideDocumentSymbols(document, token);
142157
}
158+
143159
public async provideSignatureHelp(
144160
document: TextDocument,
145161
position: Position,
@@ -149,6 +165,7 @@ export class MultiplexingJediLanguageServerActivator implements ILanguageServerA
149165
const server = await this.realLanguageServerPromise;
150166
return server.provideSignatureHelp(document, position, token, context);
151167
}
168+
152169
public dispose(): void {
153170
if (this.realLanguageServer) {
154171
this.realLanguageServer.dispose();

src/client/common/application/webviewPanels/webviewPanelProvider.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT License.
3+
34
'use strict';
5+
46
import { inject, injectable } from 'inversify';
57
import * as path from 'path';
68
import { Uri } from 'vscode';

src/client/common/application/webviews/webview.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,22 +31,25 @@ export class Webview implements IWebview {
3131

3232
// tslint:disable-next-line:no-any
3333
protected async generateLocalReactHtml(): Promise<string> {
34+
let webview: vscodeWebview;
3435
if (!this.webview) {
3536
throw new Error('WebView not initialized, too early to get a Uri');
37+
} else {
38+
webview = this.webview;
3639
}
3740

3841
const uriBase = this.webview.asWebviewUri(Uri.file(this.options.cwd)).toString();
39-
const uris = this.options.scripts.map((script) => this.webview!.asWebviewUri(Uri.file(script)));
42+
const uris = this.options.scripts.map((script) => webview.asWebviewUri(Uri.file(script))); // NOSONAR
4043
const testFiles = await this.fs.getFiles(this.options.rootPath);
4144

4245
// This method must be called so VSC is aware of files that can be pulled.
4346
// Allow js and js.map files to be loaded by webpack in the webview.
4447
testFiles
4548
.filter((f) => f.toLowerCase().endsWith('.js') || f.toLowerCase().endsWith('.js.map'))
46-
.forEach((f) => this.webview!.asWebviewUri(Uri.file(f)));
49+
.forEach((f) => webview.asWebviewUri(Uri.file(f)));
4750

48-
const rootPath = this.webview.asWebviewUri(Uri.file(this.options.rootPath)).toString();
49-
const fontAwesomePath = this.webview
51+
const rootPath = webview.asWebviewUri(Uri.file(this.options.rootPath)).toString();
52+
const fontAwesomePath = webview
5053
.asWebviewUri(
5154
Uri.file(
5255
path.join(this.options.rootPath, 'node_modules', 'font-awesome', 'css', 'font-awesome.min.css')
@@ -59,8 +62,8 @@ export class Webview implements IWebview {
5962
<meta charset="utf-8">
6063
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
6164
<meta http-equiv="Content-Security-Policy" content="img-src 'self' data: https: http: blob: ${
62-
this.webview.cspSource
63-
}; default-src 'unsafe-inline' 'unsafe-eval' data: https: http: blob: ${this.webview.cspSource};">
65+
webview.cspSource
66+
}; default-src 'unsafe-inline' 'unsafe-eval' data: https: http: blob: ${webview.cspSource};">
6467
<meta name="theme-color" content="#000000">
6568
<title>VS Code Python React UI</title>
6669
<base href="${uriBase}${uriBase.endsWith('/') ? '' : '/'}"/>

src/client/common/experiments/debuggerDataViewerExperimentEnabler.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
import { inject, injectable } from 'inversify';
22
import { IExtensionSingleActivationService } from '../../activation/types';
3-
import { ICommandManager } from '../../common/application/types';
4-
import { ContextKey } from '../../common/contextKey';
5-
import { traceError } from '../../common/logger';
6-
import { IExperimentService } from '../../common/types';
3+
import { ICommandManager } from '../application/types';
4+
import { ContextKey } from '../contextKey';
5+
import { traceError } from '../logger';
6+
import { IExperimentService } from '../types';
77

88
@injectable()
99
export class DebuggerDataViewerExperimentEnabler implements IExtensionSingleActivationService {
1010
constructor(
1111
@inject(ICommandManager) private readonly commandManager: ICommandManager,
1212
@inject(IExperimentService) private readonly experimentService: IExperimentService
1313
) {}
14-
public async activate() {
14+
15+
public async activate(): Promise<void> {
1516
this.activateInternal().catch(traceError.bind('Failed to activate debuggerDataViewerExperimentEnabler'));
1617
}
17-
private async activateInternal() {
18+
19+
private async activateInternal(): Promise<void> {
1820
// This context key controls the visibility of the 'View Variable in Data Viewer'
1921
// context menu item from the variable window context menu during a debugging session
2022
const isDataViewerExperimentEnabled = new ContextKey(

0 commit comments

Comments
 (0)