mirror of
https://github.com/Microsoft/vscode
synced 2024-09-18 01:58:27 +00:00
ux tweaks: only have show more / less when there is a good chance of details, #39441
This commit is contained in:
parent
97cc40b922
commit
031bb8e6c3
|
@ -26,6 +26,7 @@ export const Context = {
|
|||
MakesTextEdit: new RawContextKey('suggestionMakesTextEdit', true),
|
||||
AcceptSuggestionsOnEnter: new RawContextKey<boolean>('acceptSuggestionOnEnter', true),
|
||||
HasInsertAndReplaceRange: new RawContextKey('suggestionHasInsertAndReplaceRange', false),
|
||||
CanResolve: new RawContextKey('suggestionCanResolve', false),
|
||||
};
|
||||
|
||||
export const suggestWidgetStatusbarMenu = new MenuId('suggestWidgetStatusBar');
|
||||
|
@ -34,9 +35,12 @@ export class CompletionItem {
|
|||
|
||||
_brand!: 'ISuggestionItem';
|
||||
|
||||
private static readonly _defaultResolve = () => Promise.resolve();
|
||||
|
||||
readonly resolve: (token: CancellationToken) => Promise<void>;
|
||||
isResolved: boolean = false;
|
||||
|
||||
|
||||
//
|
||||
readonly editStart: IPosition;
|
||||
readonly editInsertEnd: IPosition;
|
||||
|
@ -87,7 +91,7 @@ export class CompletionItem {
|
|||
// create the suggestion resolver
|
||||
const { resolveCompletionItem } = provider;
|
||||
if (typeof resolveCompletionItem !== 'function') {
|
||||
this.resolve = () => Promise.resolve();
|
||||
this.resolve = CompletionItem._defaultResolve;
|
||||
this.isResolved = true;
|
||||
} else {
|
||||
let cached: Promise<void> | undefined;
|
||||
|
|
|
@ -139,10 +139,12 @@ export class SuggestController implements IEditorContribution {
|
|||
// Wire up makes text edit context key
|
||||
const ctxMakesTextEdit = SuggestContext.MakesTextEdit.bindTo(this._contextKeyService);
|
||||
const ctxHasInsertAndReplace = SuggestContext.HasInsertAndReplaceRange.bindTo(this._contextKeyService);
|
||||
const ctxCanResolve = SuggestContext.CanResolve.bindTo(this._contextKeyService);
|
||||
|
||||
this._toDispose.add(toDisposable(() => {
|
||||
ctxMakesTextEdit.reset();
|
||||
ctxHasInsertAndReplace.reset();
|
||||
ctxCanResolve.reset();
|
||||
}));
|
||||
|
||||
this._toDispose.add(widget.onDidFocus(({ item }) => {
|
||||
|
@ -172,6 +174,9 @@ export class SuggestController implements IEditorContribution {
|
|||
|
||||
// (ctx: hasInsertAndReplaceRange)
|
||||
ctxHasInsertAndReplace.set(!Position.equals(item.editInsertEnd, item.editReplaceEnd));
|
||||
|
||||
// (ctx: canResolve)
|
||||
ctxCanResolve.set(Boolean(item.provider.resolveCompletionItem) || Boolean(item.completion.documentation) || item.completion.detail !== item.completion.label);
|
||||
}));
|
||||
|
||||
this._toDispose.add(widget.onDetailsKeyDown(e => {
|
||||
|
@ -695,13 +700,13 @@ registerEditorCommand(new SuggestCommand({
|
|||
menuId: suggestWidgetStatusbarMenu,
|
||||
group: 'right',
|
||||
order: 1,
|
||||
when: SuggestContext.DetailsVisible,
|
||||
when: ContextKeyExpr.and(SuggestContext.DetailsVisible, SuggestContext.CanResolve),
|
||||
title: nls.localize('detail.more', "show less")
|
||||
}, {
|
||||
menuId: suggestWidgetStatusbarMenu,
|
||||
group: 'right',
|
||||
order: 1,
|
||||
when: SuggestContext.DetailsVisible.toNegated(),
|
||||
when: ContextKeyExpr.and(SuggestContext.DetailsVisible.toNegated(), SuggestContext.CanResolve),
|
||||
title: nls.localize('detail.less', "show more")
|
||||
}]
|
||||
}));
|
||||
|
|
|
@ -154,7 +154,7 @@ export class SnippetCompletionProvider implements CompletionItemProvider {
|
|||
});
|
||||
}
|
||||
|
||||
resolveCompletionItem?(model: ITextModel, position: Position, item: CompletionItem): CompletionItem {
|
||||
resolveCompletionItem(_model: ITextModel, _position: Position, item: CompletionItem): CompletionItem {
|
||||
return (item instanceof SnippetCompletion) ? item.resolve() : item;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue