提交 6c5b3da8 编写于 作者: J Joao Moreno

suggest: more cleanup

上级 30764542
......@@ -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<boolean>;
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({
......
......@@ -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<boolean>;
private loadingTimeout: number;
private currentSuggestionDetails: TPromise<void>;
private focusedItem: CompletionItem;
......@@ -329,13 +327,13 @@ export class SuggestWidget implements IContentWidget, IDisposable {
private delegate: IDelegate<CompletionItem>;
private list: List<CompletionItem>;
private suggestionSupportsAutoAccept: IKeybindingContextKey<boolean>;
private suggestWidgetVisible: IKeybindingContextKey<boolean>;
private editorBlurTimeout: TPromise<void>;
private showTimeout: TPromise<void>;
private toDispose: IDisposable[];
private _onDidVisibilityChange: Emitter<boolean> = new Emitter();
get onDidVisibilityChange(): Event<boolean> { 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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册