Merge VS Code 1.23.1 (#1520)

This commit is contained in:
Matt Irvine
2018-06-05 11:24:51 -07:00
committed by GitHub
parent e3baf5c443
commit 0c58f09e59
3651 changed files with 74249 additions and 48599 deletions

View File

@@ -19,10 +19,11 @@ import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/brows
import { ModesContentHoverWidget } from './modesContentHover';
import { ModesGlyphHoverWidget } from './modesGlyphHover';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { registerThemingParticipant } from 'vs/platform/theme/common/themeService';
import { registerThemingParticipant, IThemeService } from 'vs/platform/theme/common/themeService';
import { editorHoverHighlight, editorHoverBackground, editorHoverBorder, textLinkForeground, textCodeBlockBackground } from 'vs/platform/theme/common/colorRegistry';
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
import { MarkdownRenderer } from 'vs/editor/contrib/markdown/markdownRenderer';
import { IEmptyContentData } from 'vs/editor/browser/controller/mouseTarget';
export class ModesHoverController implements editorCommon.IEditorContribution {
@@ -57,7 +58,8 @@ export class ModesHoverController implements editorCommon.IEditorContribution {
constructor(editor: ICodeEditor,
@IOpenerService private readonly _openerService: IOpenerService,
@IModeService private readonly _modeService: IModeService
@IModeService private readonly _modeService: IModeService,
@IThemeService private readonly _themeService: IThemeService
) {
this._editor = editor;
@@ -113,8 +115,8 @@ export class ModesHoverController implements editorCommon.IEditorContribution {
}
private _onEditorMouseMove(mouseEvent: IEditorMouseEvent): void {
var targetType = mouseEvent.target.type;
var stopKey = platform.isMacintosh ? 'metaKey' : 'ctrlKey';
let targetType = mouseEvent.target.type;
let stopKey = platform.isMacintosh ? 'metaKey' : 'ctrlKey';
if (this._isMouseDown && this._hoverClicked && this.contentWidget.isColorPickerVisible()) {
return;
@@ -130,6 +132,15 @@ export class ModesHoverController implements editorCommon.IEditorContribution {
return;
}
if (targetType === MouseTargetType.CONTENT_EMPTY) {
const epsilon = this._editor.getConfiguration().fontInfo.typicalHalfwidthCharacterWidth / 2;
const data = <IEmptyContentData>mouseEvent.target.detail;
if (data && !data.isAfterLines && typeof data.horizontalDistanceToText === 'number' && data.horizontalDistanceToText < epsilon) {
// Let hover kick in even when the mouse is technically in the empty area after a line, given the distance is small enough
targetType = MouseTargetType.CONTENT_TEXT;
}
}
if (this._editor.getConfiguration().contribInfo.hover && targetType === MouseTargetType.CONTENT_TEXT) {
this.glyphWidget.hide();
this.contentWidget.startShowingAt(mouseEvent.target.range, false);
@@ -159,7 +170,7 @@ export class ModesHoverController implements editorCommon.IEditorContribution {
private _createHoverWidget() {
const renderer = new MarkdownRenderer(this._editor, this._modeService, this._openerService);
this._contentWidget = new ModesContentHoverWidget(this._editor, renderer);
this._contentWidget = new ModesContentHoverWidget(this._editor, renderer, this._themeService);
this._glyphWidget = new ModesGlyphHoverWidget(this._editor, renderer);
}
@@ -189,11 +200,17 @@ class ShowHoverAction extends EditorAction {
constructor() {
super({
id: 'editor.action.showHover',
label: nls.localize('showHover', "Show Hover"),
label: nls.localize({
key: 'showHover',
comment: [
'Label for action that will trigger the showing of a hover in the editor.',
'This allows for users to show the hover without using the mouse.'
]
}, "Show Hover"),
alias: 'Show Hover',
precondition: null,
kbOpts: {
kbExpr: EditorContextKeys.textFocus,
kbExpr: EditorContextKeys.editorTextFocus,
primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.KEY_I)
}
});

View File

@@ -23,6 +23,7 @@ import { ColorDetector } from 'vs/editor/contrib/colorPicker/colorDetector';
import { Color, RGBA } from 'vs/base/common/color';
import { IDisposable, empty as EmptyDisposable, dispose, combinedDisposable } from 'vs/base/common/lifecycle';
import { getColorPresentations } from 'vs/editor/contrib/colorPicker/color';
import { IThemeService } from 'vs/platform/theme/common/themeService';
const $ = dom.$;
class ColorHover {
@@ -169,7 +170,11 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
private renderDisposable: IDisposable = EmptyDisposable;
private toDispose: IDisposable[] = [];
constructor(editor: ICodeEditor, markdownRenderner: MarkdownRenderer) {
constructor(
editor: ICodeEditor,
markdownRenderner: MarkdownRenderer,
private readonly _themeService: IThemeService
) {
super(ModesContentHoverWidget.ID, editor);
this._computer = new ModesContentComputer(this._editor);
@@ -300,6 +305,7 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
isEmptyHoverContent = true;
let containColorPicker = false;
let markdownDisposeable: IDisposable;
messages.forEach((msg) => {
if (!msg.range) {
return;
@@ -313,7 +319,8 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
.filter(contents => !isEmptyMarkdownString(contents))
.forEach(contents => {
const renderedContents = this._markdownRenderer.render(contents);
fragment.appendChild($('div.hover-row', null, renderedContents));
markdownDisposeable = renderedContents;
fragment.appendChild($('div.hover-row', null, renderedContents.element));
isEmptyHoverContent = false;
});
} else {
@@ -329,7 +336,7 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
// create blank olor picker model and widget first to ensure it's positioned correctly.
const model = new ColorPickerModel(color, [], 0);
const widget = new ColorPickerWidget(fragment, model, this._editor.getConfiguration().pixelRatio);
const widget = new ColorPickerWidget(fragment, model, this._editor.getConfiguration().pixelRatio, this._themeService);
getColorPresentations(editorModel, colorInfo, msg.provider).then(colorPresentations => {
model.colorPresentations = colorPresentations;
@@ -388,7 +395,7 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
this.updateContents(fragment);
this._colorPicker.layout();
this.renderDisposable = combinedDisposable([colorListener, colorChangeListener, widget]);
this.renderDisposable = combinedDisposable([colorListener, colorChangeListener, widget, markdownDisposeable]);
});
}
});

View File

@@ -10,6 +10,7 @@ import { GlyphHoverWidget } from './hoverWidgets';
import { $ } from 'vs/base/browser/dom';
import { MarkdownRenderer } from 'vs/editor/contrib/markdown/markdownRenderer';
import { IMarkdownString, isEmptyMarkdownString } from 'vs/base/common/htmlContent';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
export interface IHoverMessage {
value: IMarkdownString;
@@ -91,6 +92,7 @@ export class ModesGlyphHoverWidget extends GlyphHoverWidget {
private _markdownRenderer: MarkdownRenderer;
private _computer: MarginComputer;
private _hoverOperation: HoverOperation<IHoverMessage[]>;
private _renderDisposeables: IDisposable[];
constructor(editor: ICodeEditor, markdownRenderer: MarkdownRenderer) {
super(ModesGlyphHoverWidget.ID, editor);
@@ -110,6 +112,7 @@ export class ModesGlyphHoverWidget extends GlyphHoverWidget {
}
public dispose(): void {
this._renderDisposeables = dispose(this._renderDisposeables);
this._hoverOperation.cancel();
super.dispose();
}
@@ -156,12 +159,15 @@ export class ModesGlyphHoverWidget extends GlyphHoverWidget {
}
private _renderMessages(lineNumber: number, messages: IHoverMessage[]): void {
dispose(this._renderDisposeables);
this._renderDisposeables = [];
const fragment = document.createDocumentFragment();
messages.forEach((msg) => {
const renderedContents = this._markdownRenderer.render(msg.value);
fragment.appendChild($('div.hover-row', null, renderedContents));
this._renderDisposeables.push(renderedContents);
fragment.appendChild($('div.hover-row', null, renderedContents.element));
});
this.updateContents(fragment);