Skip to content

Commit a016401

Browse files
authored
Hide problems for the hidden doc in interactive window (#6778)
* Hide problems for the hidden doc in interactive window * Change algorithm for exit
1 parent e095693 commit a016401

File tree

6 files changed

+68
-27
lines changed

6 files changed

+68
-27
lines changed

news/2 Fixes/6748.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Eliminate 'History_\<guid\>' from the problems list when using the interactive panel.

package-lock.json

Lines changed: 11 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/client/activation/languageServer/analysisOptions.ts

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,43 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT License.
3-
43
'use strict';
5-
64
import { inject, injectable, named } from 'inversify';
75
import * as path from 'path';
8-
import { CancellationToken, CompletionContext, ConfigurationChangeEvent, Disposable, Event, EventEmitter, OutputChannel, Position, TextDocument, WorkspaceFolder } from 'vscode';
9-
import { DocumentFilter, DocumentSelector, LanguageClientOptions, ProvideCompletionItemsSignature, RevealOutputChannelOn } from 'vscode-languageclient';
6+
import {
7+
CancellationToken,
8+
CompletionContext,
9+
ConfigurationChangeEvent,
10+
Diagnostic,
11+
Disposable,
12+
Event,
13+
EventEmitter,
14+
OutputChannel,
15+
Position,
16+
TextDocument,
17+
Uri,
18+
WorkspaceFolder
19+
} from 'vscode';
20+
import {
21+
DocumentFilter,
22+
DocumentSelector,
23+
HandleDiagnosticsSignature,
24+
LanguageClientOptions,
25+
ProvideCompletionItemsSignature,
26+
RevealOutputChannelOn
27+
} from 'vscode-languageclient';
28+
1029
import { IWorkspaceService } from '../../common/application/types';
11-
import { isTestExecution, PYTHON_LANGUAGE, STANDARD_OUTPUT_CHANNEL } from '../../common/constants';
30+
import { HiddenFilePrefix, isTestExecution, PYTHON_LANGUAGE, STANDARD_OUTPUT_CHANNEL } from '../../common/constants';
1231
import { traceDecorators, traceError } from '../../common/logger';
13-
import { BANNER_NAME_LS_SURVEY, IConfigurationService, IExtensionContext, IOutputChannel, IPathUtils, IPythonExtensionBanner, Resource } from '../../common/types';
32+
import {
33+
BANNER_NAME_LS_SURVEY,
34+
IConfigurationService,
35+
IExtensionContext,
36+
IOutputChannel,
37+
IPathUtils,
38+
IPythonExtensionBanner,
39+
Resource
40+
} from '../../common/types';
1441
import { debounceSync } from '../../common/utils/decorators';
1542
import { IEnvironmentVariablesProvider } from '../../common/variables/types';
1643
import { IInterpreterService } from '../../interpreter/contracts';
@@ -88,6 +115,7 @@ export class LanguageServerAnalysisOptions implements ILanguageServerAnalysisOpt
88115
}
89116
}
90117

118+
// tslint:disable-next-line: no-suspicious-comment
91119
// TODO: remove this setting since LS 0.2.92+ is not using it.
92120
// tslint:disable-next-line:no-string-literal
93121
properties['DatabasePath'] = path.join(this.context.extensionPath, this.languageServerFolder);
@@ -139,6 +167,14 @@ export class LanguageServerAnalysisOptions implements ILanguageServerAnalysisOpt
139167
provideCompletionItem: (document: TextDocument, position: Position, context: CompletionContext, token: CancellationToken, next: ProvideCompletionItemsSignature) => {
140168
this.surveyBanner.showBanner().ignoreErrors();
141169
return next(document, position, context, token);
170+
},
171+
handleDiagnostics: (uri: Uri, diagnostics: Diagnostic[], next: HandleDiagnosticsSignature) => {
172+
// Skip sending if this is a special file.
173+
const filePath = uri.fsPath;
174+
const baseName = filePath ? path.basename(filePath) : undefined;
175+
if (!baseName || !baseName.startsWith(HiddenFilePrefix)) {
176+
next(uri, diagnostics);
177+
}
142178
}
143179
}
144180
};

src/client/constants.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,6 @@ import * as path from 'path';
99
// When bundling, the bundle file for the debug adapter ends up elsewhere.
1010
const folderName = path.basename(__dirname);
1111
export const EXTENSION_ROOT_DIR = folderName === 'client' ? path.join(__dirname, '..', '..') : path.join(__dirname, '..', '..', '..', '..');
12+
13+
export const HiddenFileFormatString = '_HiddenFile_{0}.py';
14+
export const HiddenFilePrefix = '_HiddenFile_';

src/client/datascience/interactive-window/intellisense/baseIntellisenseProvider.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
Uri
1717
} from 'vscode';
1818

19+
import { HiddenFileFormatString } from '../../../../client/constants';
1920
import { IWorkspaceService } from '../../../common/application/types';
2021
import { CancellationError } from '../../../common/cancellation';
2122
import { traceWarning } from '../../../common/logger';
@@ -123,7 +124,7 @@ export abstract class BaseIntellisenseProvider implements IInteractiveWindowList
123124
// Create our dummy document. Compute a file path for it.
124125
if (this.workspaceService.rootPath || resource) {
125126
const dir = resource ? path.dirname(resource.fsPath) : this.workspaceService.rootPath!;
126-
const dummyFilePath = path.join(dir, `History_${uuid().replace(/-/g, '')}.py`);
127+
const dummyFilePath = path.join(dir, HiddenFileFormatString.format(uuid().replace(/-/g, '')));
127128
this.documentPromise.resolve(new IntellisenseDocument(dummyFilePath));
128129
} else {
129130
this.fileSystem.createTemporaryFile('.py')

src/client/datascience/interactive-window/intellisense/dotNetIntellisenseProvider.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ import { IntellisenseDocument } from './intellisenseDocument';
2323
@injectable()
2424
export class DotNetIntellisenseProvider extends BaseIntellisenseProvider implements IInteractiveWindowListener {
2525

26-
private languageClientPromise : Deferred<vscodeLanguageClient.LanguageClient> | undefined;
27-
private sentOpenDocument : boolean = false;
26+
private languageClientPromise: Deferred<vscodeLanguageClient.LanguageClient> | undefined;
27+
private sentOpenDocument: boolean = false;
2828
private active: boolean = false;
2929

3030
constructor(
@@ -47,11 +47,11 @@ export class DotNetIntellisenseProvider extends BaseIntellisenseProvider impleme
4747
this.configService.getSettings().onDidChange(() => this.active = !this.configService.getSettings().jediEnabled);
4848
}
4949

50-
protected get isActive() : boolean {
50+
protected get isActive(): boolean {
5151
return this.active;
5252
}
5353

54-
protected async provideCompletionItems(position: monacoEditor.Position, context: monacoEditor.languages.CompletionContext, cellId: string, token: CancellationToken) : Promise<monacoEditor.languages.CompletionList> {
54+
protected async provideCompletionItems(position: monacoEditor.Position, context: monacoEditor.languages.CompletionContext, cellId: string, token: CancellationToken): Promise<monacoEditor.languages.CompletionList> {
5555
const languageClient = await this.getLanguageClient();
5656
const document = await this.getDocument();
5757
if (languageClient && document) {
@@ -68,7 +68,7 @@ export class DotNetIntellisenseProvider extends BaseIntellisenseProvider impleme
6868
incomplete: false
6969
};
7070
}
71-
protected async provideHover(position: monacoEditor.Position, cellId: string, token: CancellationToken) : Promise<monacoEditor.languages.Hover> {
71+
protected async provideHover(position: monacoEditor.Position, cellId: string, token: CancellationToken): Promise<monacoEditor.languages.Hover> {
7272
const languageClient = await this.getLanguageClient();
7373
const document = await this.getDocument();
7474
if (languageClient && document) {
@@ -84,7 +84,7 @@ export class DotNetIntellisenseProvider extends BaseIntellisenseProvider impleme
8484
contents: []
8585
};
8686
}
87-
protected async provideSignatureHelp(position: monacoEditor.Position, _context: monacoEditor.languages.SignatureHelpContext, cellId: string, token: CancellationToken) : Promise<monacoEditor.languages.SignatureHelp> {
87+
protected async provideSignatureHelp(position: monacoEditor.Position, _context: monacoEditor.languages.SignatureHelpContext, cellId: string, token: CancellationToken): Promise<monacoEditor.languages.SignatureHelp> {
8888
const languageClient = await this.getLanguageClient();
8989
const document = await this.getDocument();
9090
if (languageClient && document) {
@@ -103,7 +103,7 @@ export class DotNetIntellisenseProvider extends BaseIntellisenseProvider impleme
103103
};
104104
}
105105

106-
protected async handleChanges(originalFile: string | undefined, document: IntellisenseDocument, changes: TextDocumentContentChangeEvent[]) : Promise<void> {
106+
protected async handleChanges(originalFile: string | undefined, document: IntellisenseDocument, changes: TextDocumentContentChangeEvent[]): Promise<void> {
107107
// Then see if we can talk to our language client
108108
if (this.active && document) {
109109

@@ -124,7 +124,7 @@ export class DotNetIntellisenseProvider extends BaseIntellisenseProvider impleme
124124
}
125125
}
126126

127-
private getLanguageClient(file?: Uri) : Promise<vscodeLanguageClient.LanguageClient> {
127+
private getLanguageClient(file?: Uri): Promise<vscodeLanguageClient.LanguageClient> {
128128
if (!this.languageClientPromise) {
129129
this.languageClientPromise = createDeferred<vscodeLanguageClient.LanguageClient>();
130130
this.startup(file)
@@ -138,7 +138,7 @@ export class DotNetIntellisenseProvider extends BaseIntellisenseProvider impleme
138138
return this.languageClientPromise.promise;
139139
}
140140

141-
private async startup(resource?: Uri) : Promise<void> {
141+
private async startup(resource?: Uri): Promise<void> {
142142
// Start up the language server. We'll use this to talk to the language server
143143
const options = await this.analysisOptions!.getAnalysisOptions();
144144
await this.languageServer.start(resource, options);

0 commit comments

Comments
 (0)