mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-03-21 04:20:11 -04:00
Merge from master
This commit is contained in:
@@ -2,28 +2,27 @@
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
'use strict';
|
||||
|
||||
import * as nls from 'vs/nls';
|
||||
import * as dom from 'vs/base/browser/dom';
|
||||
import { IRange, Range } from 'vs/editor/common/core/range';
|
||||
import { Position } from 'vs/editor/common/core/position';
|
||||
import { HoverProviderRegistry, Hover, IColor, DocumentColorProvider } from 'vs/editor/common/modes';
|
||||
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
|
||||
import { getHover } from 'vs/editor/contrib/hover/getHover';
|
||||
import { HoverOperation, IHoverComputer, HoverStartMode } from './hoverOperation';
|
||||
import { ContentHoverWidget } from './hoverWidgets';
|
||||
import { CancellationToken } from 'vs/base/common/cancellation';
|
||||
import { Color, RGBA } from 'vs/base/common/color';
|
||||
import { IMarkdownString, MarkdownString, isEmptyMarkdownString, markedStringsEquals } from 'vs/base/common/htmlContent';
|
||||
import { MarkdownRenderer } from 'vs/editor/contrib/markdown/markdownRenderer';
|
||||
import { Disposable, IDisposable, combinedDisposable } from 'vs/base/common/lifecycle';
|
||||
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
|
||||
import { Position } from 'vs/editor/common/core/position';
|
||||
import { IRange, Range } from 'vs/editor/common/core/range';
|
||||
import { ModelDecorationOptions } from 'vs/editor/common/model/textModel';
|
||||
import { DocumentColorProvider, Hover, HoverProviderRegistry, IColor } from 'vs/editor/common/modes';
|
||||
import { getColorPresentations } from 'vs/editor/contrib/colorPicker/color';
|
||||
import { ColorDetector } from 'vs/editor/contrib/colorPicker/colorDetector';
|
||||
import { ColorPickerModel } from 'vs/editor/contrib/colorPicker/colorPickerModel';
|
||||
import { ColorPickerWidget } from 'vs/editor/contrib/colorPicker/colorPickerWidget';
|
||||
import { ColorDetector } from 'vs/editor/contrib/colorPicker/colorDetector';
|
||||
import { Color, RGBA } from 'vs/base/common/color';
|
||||
import { IDisposable, Disposable, combinedDisposable } from 'vs/base/common/lifecycle';
|
||||
import { getColorPresentations } from 'vs/editor/contrib/colorPicker/color';
|
||||
import { getHover } from 'vs/editor/contrib/hover/getHover';
|
||||
import { HoverOperation, HoverStartMode, IHoverComputer } from 'vs/editor/contrib/hover/hoverOperation';
|
||||
import { ContentHoverWidget } from 'vs/editor/contrib/hover/hoverWidgets';
|
||||
import { MarkdownRenderer } from 'vs/editor/contrib/markdown/markdownRenderer';
|
||||
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
||||
import { CancellationToken } from 'vs/base/common/cancellation';
|
||||
const $ = dom.$;
|
||||
|
||||
class ColorHover {
|
||||
@@ -41,7 +40,7 @@ class ModesContentComputer implements IHoverComputer<HoverPart[]> {
|
||||
|
||||
private _editor: ICodeEditor;
|
||||
private _result: HoverPart[];
|
||||
private _range: Range;
|
||||
private _range: Range | null;
|
||||
|
||||
constructor(editor: ICodeEditor) {
|
||||
this._editor = editor;
|
||||
@@ -58,10 +57,14 @@ class ModesContentComputer implements IHoverComputer<HoverPart[]> {
|
||||
}
|
||||
|
||||
computeAsync(token: CancellationToken): Promise<HoverPart[]> {
|
||||
if (!this._editor.hasModel() || !this._range) {
|
||||
return Promise.resolve([]);
|
||||
}
|
||||
|
||||
const model = this._editor.getModel();
|
||||
|
||||
if (!HoverProviderRegistry.has(model)) {
|
||||
return Promise.resolve(null);
|
||||
return Promise.resolve([]);
|
||||
}
|
||||
|
||||
return getHover(model, new Position(
|
||||
@@ -71,6 +74,10 @@ class ModesContentComputer implements IHoverComputer<HoverPart[]> {
|
||||
}
|
||||
|
||||
computeSync(): HoverPart[] {
|
||||
if (!this._editor.hasModel() || !this._range) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const lineNumber = this._range.startLineNumber;
|
||||
|
||||
if (lineNumber > this._editor.getModel().getLineCount()) {
|
||||
@@ -158,14 +165,14 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
|
||||
static readonly ID = 'editor.contrib.modesContentHoverWidget';
|
||||
|
||||
private _messages: HoverPart[];
|
||||
private _lastRange: Range;
|
||||
private _lastRange: Range | null;
|
||||
private _computer: ModesContentComputer;
|
||||
private _hoverOperation: HoverOperation<HoverPart[]>;
|
||||
private _highlightDecorations: string[];
|
||||
private _isChangingDecorations: boolean;
|
||||
private _markdownRenderer: MarkdownRenderer;
|
||||
private _shouldFocus: boolean;
|
||||
private _colorPicker: ColorPickerWidget;
|
||||
private _colorPicker: ColorPickerWidget | null;
|
||||
|
||||
private renderDisposable: IDisposable = Disposable.None;
|
||||
|
||||
@@ -176,6 +183,8 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
|
||||
) {
|
||||
super(ModesContentHoverWidget.ID, editor);
|
||||
|
||||
this._messages = [];
|
||||
this._lastRange = null;
|
||||
this._computer = new ModesContentComputer(this._editor);
|
||||
this._highlightDecorations = [];
|
||||
this._isChangingDecorations = false;
|
||||
@@ -187,7 +196,8 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
|
||||
this._computer,
|
||||
result => this._withResult(result, true),
|
||||
null,
|
||||
result => this._withResult(result, false)
|
||||
result => this._withResult(result, false),
|
||||
this._editor.getConfiguration().contribInfo.hover.delay
|
||||
);
|
||||
|
||||
this._register(dom.addStandardDisposableListener(this.getDomNode(), dom.EventType.FOCUS, () => {
|
||||
@@ -301,7 +311,7 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
|
||||
|
||||
// update column from which to show
|
||||
let renderColumn = Number.MAX_VALUE;
|
||||
let highlightRange = messages[0].range;
|
||||
let highlightRange = Range.lift(messages[0].range);
|
||||
let fragment = document.createDocumentFragment();
|
||||
let isEmptyHoverContent = true;
|
||||
|
||||
@@ -361,6 +371,7 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
|
||||
newRange = range.setEndPosition(range.endLineNumber, range.startColumn + model.presentation.label.length);
|
||||
}
|
||||
|
||||
this._editor.pushUndoStop();
|
||||
this._editor.executeEdits('colorpicker', textEdits);
|
||||
|
||||
if (model.presentation.additionalTextEdits) {
|
||||
@@ -392,7 +403,7 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
|
||||
const colorChangeListener = model.onDidChangeColor(updateColorPresentations);
|
||||
|
||||
this._colorPicker = widget;
|
||||
this.showAt(new Position(renderRange.startLineNumber, renderColumn), this._shouldFocus);
|
||||
this.showAt(range.getStartPosition(), range, this._shouldFocus);
|
||||
this.updateContents(fragment);
|
||||
this._colorPicker.layout();
|
||||
|
||||
@@ -404,7 +415,7 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
|
||||
// show
|
||||
|
||||
if (!containColorPicker && !isEmptyHoverContent) {
|
||||
this.showAt(new Position(renderRange.startLineNumber, renderColumn), this._shouldFocus);
|
||||
this.showAt(new Position(renderRange.startLineNumber, renderColumn), highlightRange, this._shouldFocus);
|
||||
this.updateContents(fragment);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user