提交 bc067a81 编写于 作者: J Johannes Rieken

disable quick suggestions when in snippet mode, #50776

上级 66d811f8
......@@ -844,6 +844,7 @@ export interface InternalEditorHoverOptions {
export interface InternalSuggestOptions {
readonly filterGraceful: boolean;
readonly snippets: 'top' | 'bottom' | 'inline' | 'none';
readonly snippetsPreventQuickSuggestions: boolean;
}
export interface EditorWrappingInfo {
......@@ -1751,6 +1752,7 @@ export class EditorOptionsValidator {
return {
filterGraceful: _boolean(opts.suggest.filterGraceful, defaults.filterGraceful),
snippets: _stringSet<'top' | 'bottom' | 'inline' | 'none'>(opts.snippetSuggestions, defaults.snippets, ['top', 'bottom', 'inline', 'none']),
snippetsPreventQuickSuggestions: true,
};
}
......@@ -2470,7 +2472,8 @@ export const EDITOR_DEFAULTS: IValidatedEditorOptions = {
suggestLineHeight: 0,
suggest: {
filterGraceful: true,
snippets: 'inline'
snippets: 'inline',
snippetsPreventQuickSuggestions: true
},
selectionHighlight: true,
occurrencesHighlight: true,
......
......@@ -205,6 +205,10 @@ export class SnippetController2 implements IEditorContribution {
this._updateState();
}
isInSnippet(): boolean {
return this._inSnippet.get();
}
getSessionEnclosingRange(): Range {
if (this._session) {
return this._session.getEnclosingRange();
......
......@@ -9,7 +9,7 @@ import { fuzzyScore, fuzzyScoreGracefulAggressive, anyScore } from 'vs/base/comm
import { isDisposable } from 'vs/base/common/lifecycle';
import { ISuggestResult, ISuggestSupport } from 'vs/editor/common/modes';
import { ISuggestionItem } from './suggest';
import { InternalSuggestOptions } from 'vs/editor/common/config/editorOptions';
import { InternalSuggestOptions, EDITOR_DEFAULTS } from 'vs/editor/common/config/editorOptions';
export interface ICompletionItem extends ISuggestionItem {
matches?: number[];
......@@ -58,7 +58,7 @@ export class CompletionModel {
private _isIncomplete: Set<ISuggestSupport>;
private _stats: ICompletionStats;
constructor(items: ISuggestionItem[], column: number, lineContext: LineContext, options: InternalSuggestOptions = { filterGraceful: true, snippets: 'inline' }) {
constructor(items: ISuggestionItem[], column: number, lineContext: LineContext, options: InternalSuggestOptions = EDITOR_DEFAULTS.contribInfo.suggest) {
this._items = items;
this._column = column;
this._options = options;
......
......@@ -18,6 +18,7 @@ import { ITextModel, IWordAtPosition } from 'vs/editor/common/model';
import { ISuggestSupport, StandardTokenType, SuggestContext, SuggestRegistry, SuggestTriggerKind } from 'vs/editor/common/modes';
import { CompletionModel } from './completionModel';
import { ISuggestionItem, getSuggestionComparator, provideSuggestionItems, getSnippetSuggestSupport } from './suggest';
import { SnippetController2 } from 'vs/editor/contrib/snippet/snippetController2';
export interface ICancelEvent {
readonly retrigger: boolean;
......@@ -273,6 +274,11 @@ export class SuggestModel implements IDisposable {
return;
}
if (this._editor.getConfiguration().contribInfo.suggest.snippetsPreventQuickSuggestions && SnippetController2.get(this._editor).isInSnippet()) {
// no quick suggestion when in snippet mode
return;
}
this.cancel();
this._triggerQuickSuggest.cancelAndSet(() => {
......
......@@ -167,7 +167,7 @@ suite('CompletionModel', function () {
], 1, {
leadingLineContent: 's',
characterCountDelta: 0
}, { snippets: 'top', filterGraceful: true });
}, { snippets: 'top', snippetsPreventQuickSuggestions: true, filterGraceful: true });
assert.equal(model.items.length, 2);
const [a, b] = model.items;
......@@ -186,7 +186,7 @@ suite('CompletionModel', function () {
], 1, {
leadingLineContent: 's',
characterCountDelta: 0
}, { snippets: 'bottom', filterGraceful: true });
}, { snippets: 'bottom', snippetsPreventQuickSuggestions: true, filterGraceful: true });
assert.equal(model.items.length, 2);
const [a, b] = model.items;
......@@ -204,7 +204,7 @@ suite('CompletionModel', function () {
], 1, {
leadingLineContent: 's',
characterCountDelta: 0
}, { snippets: 'inline', filterGraceful: true });
}, { snippets: 'inline', snippetsPreventQuickSuggestions: true, filterGraceful: true });
assert.equal(model.items.length, 2);
const [a, b] = model.items;
......
......@@ -30,13 +30,15 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils';
function createMockEditor(model: TextModel): TestCodeEditor {
return createTestCodeEditor({
let editor = createTestCodeEditor({
model: model,
serviceCollection: new ServiceCollection(
[ITelemetryService, NullTelemetryService],
[IStorageService, NullStorageService]
)
),
});
editor.registerAndInstantiateContribution(SnippetController2);
return editor;
}
suite('SuggestModel - Context', function () {
......
......@@ -3123,6 +3123,7 @@ declare namespace monaco.editor {
export interface InternalSuggestOptions {
readonly filterGraceful: boolean;
readonly snippets: 'top' | 'bottom' | 'inline' | 'none';
readonly snippetsPreventQuickSuggestions: boolean;
}
export interface EditorWrappingInfo {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册