Merge from vscode 817eb6b0c720a4ecbc13c020afbbebfed667aa09 (#7356)

This commit is contained in:
Anthony Dresser
2019-09-24 21:36:17 -07:00
committed by GitHub
parent a29ae4d3b9
commit 6a6048d40f
541 changed files with 7045 additions and 7287 deletions

View File

@@ -10,14 +10,14 @@ import * as strings from 'vs/base/common/strings';
import { Event, Emitter } from 'vs/base/common/event';
import { onUnexpectedError } from 'vs/base/common/errors';
import { IDisposable, dispose, toDisposable, DisposableStore, Disposable } from 'vs/base/common/lifecycle';
import { addClass, append, $, hide, removeClass, show, toggleClass, getDomNodePagePosition, hasClass, addDisposableListener } from 'vs/base/browser/dom';
import { addClass, append, $, hide, removeClass, show, toggleClass, getDomNodePagePosition, hasClass, addDisposableListener, addStandardDisposableListener } from 'vs/base/browser/dom';
import { IListVirtualDelegate, IListEvent, IListRenderer, IListMouseEvent } from 'vs/base/browser/ui/list/list';
import { List } from 'vs/base/browser/ui/list/listWidget';
import { DomScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement';
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { ConfigurationChangedEvent, EditorOption } from 'vs/editor/common/config/editorOptions';
import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser';
import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition, IEditorMouseEvent } from 'vs/editor/browser/editorBrowser';
import { Context as SuggestContext, CompletionItem } from './suggest';
import { CompletionModel } from './completionModel';
import { alert } from 'vs/base/browser/ui/aria/aria';
@@ -39,6 +39,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
import { FileKind } from 'vs/platform/files/common/files';
import { MarkdownString } from 'vs/base/common/htmlContent';
import { flatten } from 'vs/base/common/arrays';
import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
const expandSuggestionDocsByDefault = false;
@@ -159,7 +160,6 @@ class Renderer implements IListRenderer<CompletionItem, ISuggestionTemplateData>
data.icon.className = 'icon ' + completionKindToCssClass(suggestion.kind);
data.colorspan.style.backgroundColor = '';
const labelOptions: IIconLabelValueOptions = {
labelEscapeNewLines: true,
matches: createMatches(element.score)
@@ -337,6 +337,8 @@ class SuggestionDetails {
}
this.el.style.height = this.header.offsetHeight + this.docs.offsetHeight + (this.borderWidth * 2) + 'px';
this.el.style.userSelect = 'text';
this.el.tabIndex = -1;
this.close.onmousedown = e => {
e.preventDefault();
@@ -427,7 +429,7 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate<Compl
// Editor.IContentWidget.allowEditorOverflow
readonly allowEditorOverflow = true;
readonly suppressMouseDown = true;
readonly suppressMouseDown = false;
private state: State | null = null;
private isAuto: boolean = false;
@@ -450,10 +452,10 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate<Compl
private readonly showTimeout = new TimeoutTimer();
private readonly toDispose = new DisposableStore();
private onDidSelectEmitter = new Emitter<ISelectedSuggestion>();
private onDidFocusEmitter = new Emitter<ISelectedSuggestion>();
private onDidHideEmitter = new Emitter<this>();
private onDidShowEmitter = new Emitter<this>();
private readonly onDidSelectEmitter = new Emitter<ISelectedSuggestion>();
private readonly onDidFocusEmitter = new Emitter<ISelectedSuggestion>();
private readonly onDidHideEmitter = new Emitter<this>();
private readonly onDidShowEmitter = new Emitter<this>();
readonly onDidSelect: Event<ISelectedSuggestion> = this.onDidSelectEmitter.event;
readonly onDidFocus: Event<ISelectedSuggestion> = this.onDidFocusEmitter.event;
@@ -472,6 +474,9 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate<Compl
private docsPositionPreviousWidgetY: number | null = null;
private explainMode: boolean = false;
private readonly _onDetailsKeydown = new Emitter<IKeyboardEvent>();
public readonly onDetailsKeyDown: Event<IKeyboardEvent> = this._onDetailsKeydown.event;
constructor(
private readonly editor: ICodeEditor,
@ITelemetryService private readonly telemetryService: ITelemetryService,
@@ -525,7 +530,6 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate<Compl
this.toDispose.add(this.editor.onDidChangeCursorSelection(() => this.onCursorSelectionChanged()));
this.toDispose.add(this.editor.onDidChangeConfiguration(e => e.hasChanged(EditorOption.suggest) && applyIconStyle()));
this.suggestWidgetVisible = SuggestContext.Visible.bindTo(contextKeyService);
this.suggestWidgetMultipleSuggestions = SuggestContext.MultipleSuggestions.bindTo(contextKeyService);
@@ -533,6 +537,25 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate<Compl
this.setState(State.Hidden);
this.onThemeChange(themeService.getTheme());
this.toDispose.add(addStandardDisposableListener(this.details.element, 'keydown', e => {
this._onDetailsKeydown.fire(e);
}));
this.toDispose.add(this.editor.onMouseDown((e: IEditorMouseEvent) => this.onEditorMouseDown(e)));
}
private onEditorMouseDown(mouseEvent: IEditorMouseEvent): void {
// Clicking inside details
if (this.details.element.contains(mouseEvent.target.element)) {
this.details.element.focus();
}
// Clicking outside details and inside suggest
else {
if (this.element.contains(mouseEvent.target.element)) {
this.editor.focus();
}
}
}
private onCursorSelectionChanged(): void {