From 6c5b3da860c657a9a0e5110606c230030b056c04 Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Wed, 1 Jun 2016 10:21:37 +0200 Subject: [PATCH] suggest: more cleanup --- .../editor/contrib/suggest/browser/suggest.ts | 50 ++++++++---------- .../contrib/suggest/browser/suggestWidget.ts | 52 +++++++++---------- 2 files changed, 48 insertions(+), 54 deletions(-) diff --git a/src/vs/editor/contrib/suggest/browser/suggest.ts b/src/vs/editor/contrib/suggest/browser/suggest.ts index 8e74db33ebb..f4f813941f8 100644 --- a/src/vs/editor/contrib/suggest/browser/suggest.ts +++ b/src/vs/editor/contrib/suggest/browser/suggest.ts @@ -5,24 +5,24 @@ 'use strict'; import * as nls from 'vs/nls'; -import {onUnexpectedError} from 'vs/base/common/errors'; -import {KeyCode, KeyMod} from 'vs/base/common/keyCodes'; -import {IDisposable, dispose} from 'vs/base/common/lifecycle'; -import {TPromise} from 'vs/base/common/winjs.base'; -import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation'; -import {IKeybindingContextKey, IKeybindingService, KbExpr} from 'vs/platform/keybinding/common/keybindingService'; -import {EditorAction} from 'vs/editor/common/editorAction'; -import {ICommonCodeEditor, IEditorActionDescriptorData, IEditorContribution, KEYBINDING_CONTEXT_EDITOR_TEXT_FOCUS} from 'vs/editor/common/editorCommon'; -import {CommonEditorRegistry, ContextKey, EditorActionDescriptor} from 'vs/editor/common/editorCommonExtensions'; -import {ISuggestSupport, SuggestRegistry} from 'vs/editor/common/modes'; -import {ICodeEditor} from 'vs/editor/browser/editorBrowser'; -import {EditorBrowserRegistry} from 'vs/editor/browser/editorBrowserExtensions'; -import {getSnippetController} from 'vs/editor/contrib/snippet/common/snippet'; -import {CONTEXT_SUGGEST_WIDGET_VISIBLE} from 'vs/editor/contrib/suggest/common/suggest'; -import {KeybindingsRegistry} from 'vs/platform/keybinding/common/keybindingsRegistry'; -import {withCodeEditorFromCommandHandler} from 'vs/editor/common/config/config'; -import {SuggestModel} from './suggestModel'; -import {SuggestWidget} from './suggestWidget'; +import { onUnexpectedError } from 'vs/base/common/errors'; +import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; +import { IDisposable, dispose } from 'vs/base/common/lifecycle'; +import { TPromise } from 'vs/base/common/winjs.base'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { KbExpr } from 'vs/platform/keybinding/common/keybindingService'; +import { EditorAction } from 'vs/editor/common/editorAction'; +import { ICommonCodeEditor, IEditorActionDescriptorData, IEditorContribution, KEYBINDING_CONTEXT_EDITOR_TEXT_FOCUS } from 'vs/editor/common/editorCommon'; +import { CommonEditorRegistry, ContextKey, EditorActionDescriptor } from 'vs/editor/common/editorCommonExtensions'; +import { ISuggestSupport, SuggestRegistry } from 'vs/editor/common/modes'; +import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; +import { EditorBrowserRegistry } from 'vs/editor/browser/editorBrowserExtensions'; +import { getSnippetController } from 'vs/editor/contrib/snippet/common/snippet'; +import { CONTEXT_SUGGEST_WIDGET_VISIBLE } from 'vs/editor/contrib/suggest/common/suggest'; +import { KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; +import { withCodeEditorFromCommandHandler } from 'vs/editor/common/config/config'; +import { SuggestModel } from './suggestModel'; +import { SuggestWidget } from './suggestWidget'; export class SuggestController implements IEditorContribution { static ID: string = 'editor.contrib.suggestController'; @@ -34,22 +34,18 @@ export class SuggestController implements IEditorContribution { private model: SuggestModel; private widget: SuggestWidget; private triggerCharacterListeners: IDisposable[]; - private suggestWidgetVisible: IKeybindingContextKey; private toDispose: IDisposable[]; constructor( private editor: ICodeEditor, - @IKeybindingService keybindingService: IKeybindingService, @IInstantiationService instantiationService: IInstantiationService ) { - this.suggestWidgetVisible = keybindingService.createKey(CONTEXT_SUGGEST_WIDGET_VISIBLE, false); this.model = new SuggestModel(this.editor); this.widget = instantiationService.createInstance(SuggestWidget, this.editor, this.model); this.triggerCharacterListeners = []; this.toDispose = []; - this.toDispose.push(this.widget.onDidVisibilityChange(visible => visible ? this.suggestWidgetVisible.set(true) : this.suggestWidgetVisible.reset())); this.toDispose.push(editor.onDidChangeConfiguration(() => this.update())); this.toDispose.push(editor.onDidChangeModel(() => this.update())); this.toDispose.push(editor.onDidChangeModelMode(() => this.update())); @@ -219,7 +215,7 @@ CommonEditorRegistry.registerEditorAction(new EditorActionDescriptor( const weight = CommonEditorRegistry.commandWeight(90); -function handler(id: string, fn: (controller: SuggestController)=>void) { +function handler(id: string, fn: (controller: SuggestController) => void) { return accessor => withCodeEditorFromCommandHandler(id, accessor, editor => { fn(SuggestController.getController(editor)); }); @@ -256,7 +252,7 @@ KeybindingsRegistry.registerCommandDesc({ weight, when: KbExpr.and(KbExpr.has(KEYBINDING_CONTEXT_EDITOR_TEXT_FOCUS), KbExpr.has(CONTEXT_SUGGEST_WIDGET_VISIBLE)), primary: KeyCode.DownArrow, - secondary: [ KeyMod.Alt | KeyCode.DownArrow ] + secondary: [KeyMod.Alt | KeyCode.DownArrow] }); KeybindingsRegistry.registerCommandDesc({ @@ -265,7 +261,7 @@ KeybindingsRegistry.registerCommandDesc({ weight, when: KbExpr.and(KbExpr.has(KEYBINDING_CONTEXT_EDITOR_TEXT_FOCUS), KbExpr.has(CONTEXT_SUGGEST_WIDGET_VISIBLE)), primary: KeyCode.PageDown, - secondary: [ KeyMod.Alt | KeyCode.PageDown ] + secondary: [KeyMod.Alt | KeyCode.PageDown] }); KeybindingsRegistry.registerCommandDesc({ @@ -274,7 +270,7 @@ KeybindingsRegistry.registerCommandDesc({ weight, when: KbExpr.and(KbExpr.has(KEYBINDING_CONTEXT_EDITOR_TEXT_FOCUS), KbExpr.has(CONTEXT_SUGGEST_WIDGET_VISIBLE)), primary: KeyCode.UpArrow, - secondary: [ KeyMod.Alt | KeyCode.UpArrow ] + secondary: [KeyMod.Alt | KeyCode.UpArrow] }); KeybindingsRegistry.registerCommandDesc({ @@ -283,7 +279,7 @@ KeybindingsRegistry.registerCommandDesc({ weight, when: KbExpr.and(KbExpr.has(KEYBINDING_CONTEXT_EDITOR_TEXT_FOCUS), KbExpr.has(CONTEXT_SUGGEST_WIDGET_VISIBLE)), primary: KeyCode.PageUp, - secondary: [ KeyMod.Alt | KeyCode.PageUp ] + secondary: [KeyMod.Alt | KeyCode.PageUp] }); KeybindingsRegistry.registerCommandDesc({ diff --git a/src/vs/editor/contrib/suggest/browser/suggestWidget.ts b/src/vs/editor/contrib/suggest/browser/suggestWidget.ts index e40f58e9045..236d1a089bc 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestWidget.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestWidget.ts @@ -8,25 +8,24 @@ import 'vs/css!./suggest'; import * as nls from 'vs/nls'; import * as strings from 'vs/base/common/strings'; -import {isPromiseCanceledError, onUnexpectedError} from 'vs/base/common/errors'; -import Event, { Emitter } from 'vs/base/common/event'; -import {IDisposable, dispose, toDisposable} from 'vs/base/common/lifecycle'; import * as timer from 'vs/base/common/timer'; -import {TPromise} from 'vs/base/common/winjs.base'; -import {addClass, append, emmet as $, hide, removeClass, show, toggleClass} from 'vs/base/browser/dom'; -import {HighlightedLabel} from 'vs/base/browser/ui/highlightedlabel/highlightedLabel'; -import {IDelegate, IFocusChangeEvent, IRenderer, ISelectionChangeEvent} 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 {IInstantiationService} from 'vs/platform/instantiation/common/instantiation'; -import {IKeybindingContextKey, IKeybindingService} from 'vs/platform/keybinding/common/keybindingService'; -import {ITelemetryService} from 'vs/platform/telemetry/common/telemetry'; -import {IConfigurationChangedEvent} from 'vs/editor/common/editorCommon'; -import {ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition} from 'vs/editor/browser/editorBrowser'; -import {CONTEXT_SUGGESTION_SUPPORTS_ACCEPT_ON_KEY} from '../common/suggest'; -import {CompletionItem, CompletionModel} from './completionModel'; -import {ICancelEvent, ISuggestEvent, ITriggerEvent, SuggestModel} from './suggestModel'; -import {alert} from 'vs/base/browser/ui/aria/aria'; +import { TPromise } from 'vs/base/common/winjs.base'; +import { isPromiseCanceledError, onUnexpectedError } from 'vs/base/common/errors'; +import { IDisposable, dispose, toDisposable } from 'vs/base/common/lifecycle'; +import { addClass, append, emmet as $, hide, removeClass, show, toggleClass } from 'vs/base/browser/dom'; +import { HighlightedLabel } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel'; +import { IDelegate, IFocusChangeEvent, IRenderer, ISelectionChangeEvent } 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 { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { IKeybindingContextKey, IKeybindingService } from 'vs/platform/keybinding/common/keybindingService'; +import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { IConfigurationChangedEvent } from 'vs/editor/common/editorCommon'; +import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; +import { CONTEXT_SUGGEST_WIDGET_VISIBLE, CONTEXT_SUGGESTION_SUPPORTS_ACCEPT_ON_KEY } from '../common/suggest'; +import { CompletionItem, CompletionModel } from './completionModel'; +import { ICancelEvent, ISuggestEvent, ITriggerEvent, SuggestModel } from './suggestModel'; +import { alert } from 'vs/base/browser/ui/aria/aria'; interface ISuggestionTemplateData { root: HTMLElement; @@ -312,7 +311,6 @@ export class SuggestWidget implements IContentWidget, IDisposable { private state: State; private isAuto: boolean; - private suggestionSupportsAutoAccept: IKeybindingContextKey; private loadingTimeout: number; private currentSuggestionDetails: TPromise; private focusedItem: CompletionItem; @@ -329,13 +327,13 @@ export class SuggestWidget implements IContentWidget, IDisposable { private delegate: IDelegate; private list: List; + private suggestionSupportsAutoAccept: IKeybindingContextKey; + private suggestWidgetVisible: IKeybindingContextKey; + private editorBlurTimeout: TPromise; private showTimeout: TPromise; private toDispose: IDisposable[]; - private _onDidVisibilityChange: Emitter = new Emitter(); - get onDidVisibilityChange(): Event { return this._onDidVisibilityChange.event; } - constructor( private editor: ICodeEditor, private model: SuggestModel, @@ -345,7 +343,6 @@ export class SuggestWidget implements IContentWidget, IDisposable { ) { this.isAuto = false; this.focusedItem = null; - this.suggestionSupportsAutoAccept = keybindingService.createKey(CONTEXT_SUGGESTION_SUPPORTS_ACCEPT_ON_KEY, true); this.telemetryData = null; this.telemetryService = telemetryService; @@ -378,6 +375,9 @@ export class SuggestWidget implements IContentWidget, IDisposable { this.model.onDidCancel(e => this.onDidCancel(e)) ]; + this.suggestionSupportsAutoAccept = keybindingService.createKey(CONTEXT_SUGGESTION_SUPPORTS_ACCEPT_ON_KEY, true); + this.suggestWidgetVisible = keybindingService.createKey(CONTEXT_SUGGEST_WIDGET_VISIBLE, false); + this.editor.addContentWidget(this); this.setState(State.Hidden); @@ -759,7 +759,7 @@ export class SuggestWidget implements IContentWidget, IDisposable { private show(): void { this.updateWidgetHeight(); - this._onDidVisibilityChange.fire(true); + this.suggestWidgetVisible.set(true); this.renderDetails(); this.showTimeout = TPromise.timeout(100).then(() => { addClass(this.element, 'visible'); @@ -767,7 +767,7 @@ export class SuggestWidget implements IContentWidget, IDisposable { } private hide(): void { - this._onDidVisibilityChange.fire(false); + this.suggestWidgetVisible.reset(); removeClass(this.element, 'visible'); } @@ -850,8 +850,6 @@ export class SuggestWidget implements IContentWidget, IDisposable { this.list.dispose(); this.list = null; this.toDispose = dispose(this.toDispose); - this._onDidVisibilityChange.dispose(); - this._onDidVisibilityChange = null; if (this.loadingTimeout) { clearTimeout(this.loadingTimeout); this.loadingTimeout = null; -- GitLab