Revert "Merge from vscode 81d7885dc2e9dc617e1522697a2966bc4025a45d (#5949)" (#5983)

This reverts commit d15a3fcc98.
This commit is contained in:
Karl Burtram
2019-06-11 12:35:58 -07:00
committed by GitHub
parent 95a50b7892
commit 5a7562a37b
926 changed files with 11394 additions and 19540 deletions

View File

@@ -19,6 +19,14 @@
cursor: pointer;
}
.monaco-editor .peekview-widget .head .peekview-title .icon {
display: inline-block;
height: 16px;
width: 16px;
vertical-align: text-bottom;
margin-right: 4px;
}
.monaco-editor .peekview-widget .head .peekview-title .dirname:not(:empty) {
font-size: 0.9em;
margin-left: 0.5em;

View File

@@ -85,6 +85,7 @@ export abstract class PeekViewWidget extends ZoneWidget {
private _onDidClose = new Emitter<PeekViewWidget>();
protected _headElement: HTMLDivElement;
protected _headingIcon: HTMLElement;
protected _primaryHeading: HTMLElement;
protected _secondaryHeading: HTMLElement;
protected _metaHeading: HTMLElement;
@@ -154,18 +155,18 @@ export abstract class PeekViewWidget extends ZoneWidget {
dom.append(this._headElement, titleElement);
dom.addStandardDisposableListener(titleElement, 'click', event => this._onTitleClick(event));
this._fillTitleIcon(titleElement);
this._headingIcon = dom.$('span');
this._primaryHeading = dom.$('span.filename');
this._secondaryHeading = dom.$('span.dirname');
this._metaHeading = dom.$('span.meta');
dom.append(titleElement, this._primaryHeading, this._secondaryHeading, this._metaHeading);
dom.append(titleElement, this._headingIcon, this._primaryHeading, this._secondaryHeading, this._metaHeading);
const actionsContainer = dom.$('.peekview-actions');
dom.append(this._headElement, actionsContainer);
const actionBarOptions = this._getActionBarOptions();
this._actionbarWidget = new ActionBar(actionsContainer, actionBarOptions);
this._disposables.add(this._actionbarWidget);
this._disposables.push(this._actionbarWidget);
this._actionbarWidget.push(new Action('peekview.close', nls.localize('label.close', "Close"), 'close-peekview-action', true, () => {
this.dispose();
@@ -173,9 +174,6 @@ export abstract class PeekViewWidget extends ZoneWidget {
}), { label: false, icon: true });
}
protected _fillTitleIcon(container: HTMLElement): void {
}
protected _getActionBarOptions(): IActionBarOptions {
return {};
}
@@ -184,6 +182,10 @@ export abstract class PeekViewWidget extends ZoneWidget {
// implement me
}
public setTitleIcon(iconClassName: string): void {
this._headingIcon.className = iconClassName ? `icon ${iconClassName}` : '';
}
public setTitle(primaryHeading: string, secondaryHeading?: string): void {
this._primaryHeading.innerHTML = strings.escape(primaryHeading);
this._primaryHeading.setAttribute('aria-label', primaryHeading);

View File

@@ -5,7 +5,7 @@
import * as nls from 'vs/nls';
import { onUnexpectedError } from 'vs/base/common/errors';
import { dispose, DisposableStore } from 'vs/base/common/lifecycle';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey';
@@ -32,11 +32,11 @@ export abstract class ReferencesController implements editorCommon.IEditorContri
private static readonly ID = 'editor.contrib.referencesController';
private readonly _disposables = new DisposableStore();
private readonly _editor: ICodeEditor;
private _widget: ReferenceWidget | null;
private _model: ReferencesModel | null;
private _requestIdPool = 0;
private _disposables: IDisposable[] = [];
private _ignoreModelChangeEvent = false;
private readonly _referenceSearchVisible: IContextKey<boolean>;
@@ -91,8 +91,8 @@ export abstract class ReferencesController implements editorCommon.IEditorContri
this._referenceSearchVisible.set(true);
// close the widget on model/mode changes
this._disposables.add(this._editor.onDidChangeModelLanguage(() => { this.closeWidget(); }));
this._disposables.add(this._editor.onDidChangeModel(() => {
this._disposables.push(this._editor.onDidChangeModelLanguage(() => { this.closeWidget(); }));
this._disposables.push(this._editor.onDidChangeModel(() => {
if (!this._ignoreModelChangeEvent) {
this.closeWidget();
}
@@ -103,7 +103,7 @@ export abstract class ReferencesController implements editorCommon.IEditorContri
this._widget.setTitle(nls.localize('labelLoading', "Loading..."));
this._widget.show(range);
this._disposables.add(this._widget.onDidClose(() => {
this._disposables.push(this._widget.onDidClose(() => {
modelPromise.cancel();
if (this._widget) {
this._storageService.store(storageKey, JSON.stringify(this._widget.layoutData), StorageScope.GLOBAL);
@@ -112,7 +112,7 @@ export abstract class ReferencesController implements editorCommon.IEditorContri
this.closeWidget();
}));
this._disposables.add(this._widget.onDidSelectReference(event => {
this._disposables.push(this._widget.onDidSelectReference(event => {
let { element, kind } = event;
switch (kind) {
case 'open':
@@ -205,7 +205,7 @@ export abstract class ReferencesController implements editorCommon.IEditorContri
this._widget = null;
}
this._referenceSearchVisible.reset();
this._disposables.clear();
this._disposables = dispose(this._disposables);
if (this._model) {
dispose(this._model);
this._model = null;

View File

@@ -6,7 +6,7 @@
import { localize } from 'vs/nls';
import { Event, Emitter } from 'vs/base/common/event';
import { basename } from 'vs/base/common/resources';
import { IDisposable, dispose, IReference, DisposableStore } from 'vs/base/common/lifecycle';
import { IDisposable, dispose, IReference } from 'vs/base/common/lifecycle';
import * as strings from 'vs/base/common/strings';
import { URI } from 'vs/base/common/uri';
import { defaultGenerator } from 'vs/base/common/idGenerator';
@@ -14,7 +14,6 @@ import { Range, IRange } from 'vs/editor/common/core/range';
import { Location, LocationLink } from 'vs/editor/common/modes';
import { ITextModelService, ITextEditorModel } from 'vs/editor/common/services/resolverService';
import { Position } from 'vs/editor/common/core/position';
import { IMatch } from 'vs/base/common/filters';
export class OneReference {
readonly id: string;
@@ -62,7 +61,7 @@ export class FilePreview implements IDisposable {
dispose(this._modelReference);
}
preview(range: IRange, n: number = 8): { value: string; highlight: IMatch } | undefined {
preview(range: IRange, n: number = 8): { before: string; inside: string; after: string } | undefined {
const model = this._modelReference.object.textEditorModel;
if (!model) {
@@ -74,14 +73,13 @@ export class FilePreview implements IDisposable {
const beforeRange = new Range(startLineNumber, word.startColumn, startLineNumber, startColumn);
const afterRange = new Range(endLineNumber, endColumn, endLineNumber, Number.MAX_VALUE);
const before = model.getValueInRange(beforeRange).replace(/^\s+/, strings.empty);
const inside = model.getValueInRange(range);
const after = model.getValueInRange(afterRange).replace(/\s+$/, strings.empty);
return {
value: before + inside + after,
highlight: { start: before.length, end: before.length + inside.length }
const ret = {
before: model.getValueInRange(beforeRange).replace(/^\s+/, strings.empty),
inside: model.getValueInRange(range),
after: model.getValueInRange(afterRange).replace(/\s+$/, strings.empty)
};
return ret;
}
}
@@ -166,7 +164,7 @@ export class FileReferences implements IDisposable {
export class ReferencesModel implements IDisposable {
private readonly _disposables = new DisposableStore();
private readonly _disposables: IDisposable[];
readonly groups: FileReferences[] = [];
readonly references: OneReference[] = [];
@@ -174,7 +172,7 @@ export class ReferencesModel implements IDisposable {
readonly onDidChangeReferenceRange: Event<OneReference> = this._onDidChangeReferenceRange.event;
constructor(references: LocationLink[]) {
this._disposables = [];
// grouping and sorting
const [providersFirst] = references;
references.sort(ReferencesModel._compareReferences);
@@ -192,7 +190,7 @@ export class ReferencesModel implements IDisposable {
|| !Range.equalsRange(ref.range, current.children[current.children.length - 1].range)) {
let oneRef = new OneReference(current, ref.targetSelectionRange || ref.range, providersFirst === ref);
this._disposables.add(oneRef.onRefChanged((e) => this._onDidChangeReferenceRange.fire(e)));
this._disposables.push(oneRef.onRefChanged((e) => this._onDidChangeReferenceRange.fire(e)));
this.references.push(oneRef);
current.children.push(oneRef);
}
@@ -282,8 +280,9 @@ export class ReferencesModel implements IDisposable {
dispose(): void {
dispose(this.groups);
this._disposables.dispose();
dispose(this._disposables);
this.groups.length = 0;
this._disposables.length = 0;
}
private static _compareReferences(a: Location, b: Location): number {

View File

@@ -15,6 +15,7 @@ import * as dom from 'vs/base/browser/dom';
import { localize } from 'vs/nls';
import { getBaseLabel } from 'vs/base/common/labels';
import { dirname, basename } from 'vs/base/common/resources';
import { escape } from 'vs/base/common/strings';
import { Disposable } from 'vs/base/common/lifecycle';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IAccessibilityProvider } from 'vs/base/browser/ui/list/listWidget';
@@ -22,7 +23,6 @@ import { IListVirtualDelegate, IKeyboardNavigationLabelProvider, IIdentityProvid
import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { FuzzyScore, createMatches, IMatch } from 'vs/base/common/filters';
import { HighlightedLabel } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel';
//#region data source
@@ -82,14 +82,8 @@ export class StringRepresentationProvider implements IKeyboardNavigationLabelPro
constructor(@IKeybindingService private readonly _keybindingService: IKeybindingService) { }
getKeyboardNavigationLabel(element: TreeElement): { toString(): string; } {
if (element instanceof OneReference) {
const { preview } = element.parent;
const parts = preview && preview.preview(element.range);
if (parts) {
return parts.value;
}
}
// FileReferences or unresolved OneReference
// todo@joao `OneReference` elements are lazy and their "real" label
// isn't known yet
return basename(element.uri);
}
@@ -167,29 +161,31 @@ export class FileReferencesRenderer implements ITreeRenderer<FileReferences, Fuz
//#region render: Reference
class OneReferenceTemplate {
readonly label: HighlightedLabel;
readonly before: HTMLSpanElement;
readonly inside: HTMLSpanElement;
readonly after: HTMLSpanElement;
constructor(container: HTMLElement) {
this.label = new HighlightedLabel(container, false);
const parent = document.createElement('div');
this.before = document.createElement('span');
this.inside = document.createElement('span');
this.after = document.createElement('span');
dom.addClass(this.inside, 'referenceMatch');
dom.addClass(parent, 'reference');
parent.appendChild(this.before);
parent.appendChild(this.inside);
parent.appendChild(this.after);
container.appendChild(parent);
}
set(element: OneReference, score?: FuzzyScore): void {
set(element: OneReference): void {
const filePreview = element.parent.preview;
const preview = filePreview && filePreview.preview(element.range);
if (!preview) {
// this means we FAILED to resolve the document...
this.label.set(`${basename(element.uri)}:${element.range.startLineNumber + 1}:${element.range.startColumn + 1}`);
} else {
// render search match as highlight unless
// we have score, then render the score
const { value, highlight } = preview;
if (score && !FuzzyScore.isDefault(score)) {
dom.toggleClass(this.label.element, 'referenceMatch', false);
this.label.set(value, createMatches(score));
} else {
dom.toggleClass(this.label.element, 'referenceMatch', true);
this.label.set(value, [highlight]);
}
if (preview) {
const { before, inside, after } = preview;
this.before.innerHTML = escape(before);
this.inside.innerHTML = escape(inside);
this.after.innerHTML = escape(after);
}
}
}
@@ -203,10 +199,11 @@ export class OneReferenceRenderer implements ITreeRenderer<OneReference, FuzzySc
renderTemplate(container: HTMLElement): OneReferenceTemplate {
return new OneReferenceTemplate(container);
}
renderElement(node: ITreeNode<OneReference, FuzzyScore>, index: number, templateData: OneReferenceTemplate): void {
templateData.set(node.element, node.filterData);
renderElement(element: ITreeNode<OneReference, FuzzyScore>, index: number, templateData: OneReferenceTemplate): void {
templateData.set(element.element);
}
disposeTemplate(): void {
//
}
}

View File

@@ -8,7 +8,7 @@ import { IMouseEvent } from 'vs/base/browser/mouseEvent';
import { Orientation } from 'vs/base/browser/ui/sash/sash';
import { Color } from 'vs/base/common/color';
import { Emitter, Event } from 'vs/base/common/event';
import { dispose, IDisposable, IReference, DisposableStore } from 'vs/base/common/lifecycle';
import { dispose, IDisposable, IReference } from 'vs/base/common/lifecycle';
import { Schemas } from 'vs/base/common/network';
import { basenameOrAuthority, dirname } from 'vs/base/common/resources';
import 'vs/css!./media/referencesWidget';
@@ -47,22 +47,22 @@ class DecorationsManager implements IDisposable {
private _decorations = new Map<string, OneReference>();
private _decorationIgnoreSet = new Set<string>();
private readonly _callOnDispose = new DisposableStore();
private readonly _callOnModelChange = new DisposableStore();
private _callOnDispose: IDisposable[] = [];
private _callOnModelChange: IDisposable[] = [];
constructor(private _editor: ICodeEditor, private _model: ReferencesModel) {
this._callOnDispose.add(this._editor.onDidChangeModel(() => this._onModelChanged()));
this._callOnDispose.push(this._editor.onDidChangeModel(() => this._onModelChanged()));
this._onModelChanged();
}
public dispose(): void {
this._callOnModelChange.dispose();
this._callOnDispose.dispose();
this._callOnModelChange = dispose(this._callOnModelChange);
this._callOnDispose = dispose(this._callOnDispose);
this.removeDecorations();
}
private _onModelChanged(): void {
this._callOnModelChange.clear();
this._callOnModelChange = dispose(this._callOnModelChange);
const model = this._editor.getModel();
if (model) {
for (const ref of this._model.groups) {
@@ -78,7 +78,7 @@ class DecorationsManager implements IDisposable {
if (!this._editor.hasModel()) {
return;
}
this._callOnModelChange.add(this._editor.getModel().onDidChangeDecorations((event) => this._onDecorationChanged()));
this._callOnModelChange.push(this._editor.getModel().onDidChangeDecorations((event) => this._onDecorationChanged()));
const newDecorations: IModelDeltaDecoration[] = [];
const newDecorationsActualIndex: number[] = [];
@@ -194,8 +194,8 @@ export class ReferenceWidget extends PeekViewWidget {
private _model: ReferencesModel | undefined;
private _decorationsManager: DecorationsManager;
private readonly _disposeOnNewModel = new DisposableStore();
private readonly _callOnDispose = new DisposableStore();
private _disposeOnNewModel: IDisposable[] = [];
private _callOnDispose: IDisposable[] = [];
private _onDidSelectReference = new Emitter<SelectionEvent>();
private _tree: WorkbenchAsyncDataTree<ReferencesModel | FileReferences, TreeElement, FuzzyScore>;
@@ -222,19 +222,15 @@ export class ReferenceWidget extends PeekViewWidget {
super(editor, { showFrame: false, showArrow: true, isResizeable: true, isAccessible: true });
this._applyTheme(themeService.getTheme());
this._callOnDispose.add(themeService.onThemeChange(this._applyTheme.bind(this)));
this._callOnDispose.push(themeService.onThemeChange(this._applyTheme.bind(this)));
this._peekViewService.addExclusiveWidget(editor, this);
this.create();
}
dispose(): void {
this.setModel(undefined);
this._callOnDispose.dispose();
this._disposeOnNewModel.dispose();
dispose(this._preview);
dispose(this._previewNotAvailableMessage);
dispose(this._tree);
dispose(this._previewModelReference);
this._callOnDispose = dispose(this._callOnDispose);
dispose<IDisposable>(this._preview, this._previewNotAvailableMessage, this._tree, this._previewModelReference);
this._splitView.dispose();
super.dispose();
}
@@ -348,11 +344,11 @@ export class ReferenceWidget extends PeekViewWidget {
}
}, Sizing.Distribute);
this._disposables.add(this._splitView.onDidSashChange(() => {
this._splitView.onDidSashChange(() => {
if (this._dim.width) {
this.layoutData.ratio = this._splitView.getViewSize(0) / this._dim.width;
}
}, undefined));
}, undefined, this._disposables);
// listen on selection and focus
let onEvent = (element: any, kind: 'show' | 'goto' | 'side') => {
@@ -425,7 +421,7 @@ export class ReferenceWidget extends PeekViewWidget {
public setModel(newModel: ReferencesModel | undefined): Promise<any> {
// clean up
this._disposeOnNewModel.clear();
this._disposeOnNewModel = dispose(this._disposeOnNewModel);
this._model = newModel;
if (this._model) {
return this._onNewModel();
@@ -447,13 +443,13 @@ export class ReferenceWidget extends PeekViewWidget {
dom.hide(this._messageContainer);
this._decorationsManager = new DecorationsManager(this._preview, this._model);
this._disposeOnNewModel.add(this._decorationsManager);
this._disposeOnNewModel.push(this._decorationsManager);
// listen on model changes
this._disposeOnNewModel.add(this._model.onDidChangeReferenceRange(reference => this._tree.rerender(reference)));
this._disposeOnNewModel.push(this._model.onDidChangeReferenceRange(reference => this._tree.rerender(reference)));
// listen on editor
this._disposeOnNewModel.add(this._preview.onMouseDown(e => {
this._disposeOnNewModel.push(this._preview.onMouseDown(e => {
const { event, target } = e;
if (event.detail !== 2) {
return;
@@ -570,7 +566,7 @@ export const peekViewEditorMatchHighlightBorder = registerColor('peekViewEditor.
registerThemingParticipant((theme, collector) => {
const findMatchHighlightColor = theme.getColor(peekViewResultsMatchHighlight);
if (findMatchHighlightColor) {
collector.addRule(`.monaco-editor .reference-zone-widget .ref-tree .referenceMatch .highlight { background-color: ${findMatchHighlightColor}; }`);
collector.addRule(`.monaco-editor .reference-zone-widget .ref-tree .referenceMatch { background-color: ${findMatchHighlightColor}; }`);
}
const referenceHighlightColor = theme.getColor(peekViewEditorMatchHighlight);
if (referenceHighlightColor) {
@@ -582,7 +578,7 @@ registerThemingParticipant((theme, collector) => {
}
const hcOutline = theme.getColor(activeContrastBorder);
if (hcOutline) {
collector.addRule(`.monaco-editor .reference-zone-widget .ref-tree .referenceMatch .highlight { border: 1px dotted ${hcOutline}; box-sizing: border-box; }`);
collector.addRule(`.monaco-editor .reference-zone-widget .ref-tree .referenceMatch { border: 1px dotted ${hcOutline}; box-sizing: border-box; }`);
}
const resultsBackground = theme.getColor(peekViewResultsBackground);
if (resultsBackground) {