Merge from vscode 966b87dd4013be1a9c06e2b8334522ec61905cc2 (#4696)

This commit is contained in:
Anthony Dresser
2019-03-26 11:43:38 -07:00
committed by GitHub
parent b1393ae615
commit 0d8ef9583b
268 changed files with 5947 additions and 3422 deletions

View File

@@ -1567,9 +1567,9 @@ export interface ITokenizationRegistry {
/**
* Get the tokenization support for a language.
* Returns null if not found.
* Returns `null` if not found.
*/
get(language: string): ITokenizationSupport;
get(language: string): ITokenizationSupport | null;
/**
* Get the promise of a tokenization support for a language.

View File

@@ -57,7 +57,7 @@ export class RichEditSupport {
public readonly indentationRules: IndentationRule | undefined;
public readonly foldingRules: FoldingRules;
constructor(languageIdentifier: LanguageIdentifier, previous: RichEditSupport, rawConf: LanguageConfiguration) {
constructor(languageIdentifier: LanguageIdentifier, previous: RichEditSupport | undefined, rawConf: LanguageConfiguration) {
this._languageIdentifier = languageIdentifier;
this._brackets = null;
@@ -175,34 +175,30 @@ export class LanguageConfigurationChangeEvent {
export class LanguageConfigurationRegistryImpl {
private readonly _entries: RichEditSupport[];
private readonly _entries = new Map<LanguageId, RichEditSupport>();
private readonly _onDidChange = new Emitter<LanguageConfigurationChangeEvent>();
public readonly onDidChange: Event<LanguageConfigurationChangeEvent> = this._onDidChange.event;
constructor() {
this._entries = [];
}
public register(languageIdentifier: LanguageIdentifier, configuration: LanguageConfiguration): IDisposable {
let previous = this._getRichEditSupport(languageIdentifier.id);
let current = new RichEditSupport(languageIdentifier, previous, configuration);
this._entries[languageIdentifier.id] = current;
this._entries.set(languageIdentifier.id, current);
this._onDidChange.fire({ languageIdentifier });
return toDisposable(() => {
if (this._entries[languageIdentifier.id] === current) {
this._entries[languageIdentifier.id] = previous;
if (this._entries.get(languageIdentifier.id) === current) {
this._entries.set(languageIdentifier.id, previous);
this._onDidChange.fire({ languageIdentifier });
}
});
}
private _getRichEditSupport(languageId: LanguageId): RichEditSupport {
return this._entries[languageId] || null;
private _getRichEditSupport(languageId: LanguageId): RichEditSupport | undefined {
return this._entries.get(languageId);
}
public getIndentationRules(languageId: LanguageId) {
let value = this._entries[languageId];
const value = this._entries.get(languageId);
if (!value) {
return null;

View File

@@ -7,11 +7,13 @@ import { Color } from 'vs/base/common/color';
import { Emitter, Event } from 'vs/base/common/event';
import { IDisposable, toDisposable } from 'vs/base/common/lifecycle';
import { ColorId, ITokenizationRegistry, ITokenizationSupport, ITokenizationSupportChangedEvent } from 'vs/editor/common/modes';
import { withUndefinedAsNull } from 'vs/base/common/types';
import { keys } from 'vs/base/common/map';
export class TokenizationRegistryImpl implements ITokenizationRegistry {
private readonly _map: { [language: string]: ITokenizationSupport };
private readonly _promises: { [language: string]: Thenable<void> };
private readonly _map = new Map<string, ITokenizationSupport>();
private readonly _promises = new Map<string, Thenable<void>>();
private readonly _onDidChange = new Emitter<ITokenizationSupportChangedEvent>();
public readonly onDidChange: Event<ITokenizationSupportChangedEvent> = this._onDidChange.event;
@@ -19,8 +21,6 @@ export class TokenizationRegistryImpl implements ITokenizationRegistry {
private _colorMap: Color[] | null;
constructor() {
this._map = Object.create(null);
this._promises = Object.create(null);
this._colorMap = null;
}
@@ -32,13 +32,13 @@ export class TokenizationRegistryImpl implements ITokenizationRegistry {
}
public register(language: string, support: ITokenizationSupport) {
this._map[language] = support;
this._map.set(language, support);
this.fire([language]);
return toDisposable(() => {
if (this._map[language] !== support) {
if (this._map.get(language) !== support) {
return;
}
delete this._map[language];
this._map.delete(language);
this.fire([language]);
});
}
@@ -48,13 +48,13 @@ export class TokenizationRegistryImpl implements ITokenizationRegistry {
let registration: IDisposable | null = null;
let isDisposed: boolean = false;
this._promises[language] = supportPromise.then(support => {
delete this._promises[language];
this._promises.set(language, supportPromise.then(support => {
this._promises.delete(language);
if (isDisposed || !support) {
return;
}
registration = this.register(language, support);
});
}));
return toDisposable(() => {
isDisposed = true;
@@ -69,21 +69,21 @@ export class TokenizationRegistryImpl implements ITokenizationRegistry {
if (support) {
return Promise.resolve(support);
}
const promise = this._promises[language];
const promise = this._promises.get(language);
if (promise) {
return promise.then(_ => this.get(language));
return promise.then(_ => this.get(language)!);
}
return null;
}
public get(language: string): ITokenizationSupport {
return (this._map[language] || null);
public get(language: string): ITokenizationSupport | null {
return withUndefinedAsNull(this._map.get(language));
}
public setColorMap(colorMap: Color[]): void {
this._colorMap = colorMap;
this._onDidChange.fire({
changedLanguages: Object.keys(this._map),
changedLanguages: keys(this._map),
changedColorMap: true
});
}

View File

@@ -0,0 +1,84 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as nls from 'vs/nls';
export namespace AccessibilityHelpNLS {
export const noSelection = nls.localize("noSelection", "No selection");
export const singleSelectionRange = nls.localize("singleSelectionRange", "Line {0}, Column {1} ({2} selected)");
export const singleSelection = nls.localize("singleSelection", "Line {0}, Column {1}");
export const multiSelectionRange = nls.localize("multiSelectionRange", "{0} selections ({1} characters selected)");
export const multiSelection = nls.localize("multiSelection", "{0} selections");
export const emergencyConfOn = nls.localize("emergencyConfOn", "Now changing the setting `accessibilitySupport` to 'on'.");
export const openingDocs = nls.localize("openingDocs", "Now opening the Editor Accessibility documentation page.");
export const readonlyDiffEditor = nls.localize("readonlyDiffEditor", " in a read-only pane of a diff editor.");
export const editableDiffEditor = nls.localize("editableDiffEditor", " in a pane of a diff editor.");
export const readonlyEditor = nls.localize("readonlyEditor", " in a read-only code editor");
export const editableEditor = nls.localize("editableEditor", " in a code editor");
export const changeConfigToOnMac = nls.localize("changeConfigToOnMac", "To configure the editor to be optimized for usage with a Screen Reader press Command+E now.");
export const changeConfigToOnWinLinux = nls.localize("changeConfigToOnWinLinux", "To configure the editor to be optimized for usage with a Screen Reader press Control+E now.");
export const auto_on = nls.localize("auto_on", "The editor is configured to be optimized for usage with a Screen Reader.");
export const auto_off = nls.localize("auto_off", "The editor is configured to never be optimized for usage with a Screen Reader, which is not the case at this time.");
export const tabFocusModeOnMsg = nls.localize("tabFocusModeOnMsg", "Pressing Tab in the current editor will move focus to the next focusable element. Toggle this behavior by pressing {0}.");
export const tabFocusModeOnMsgNoKb = nls.localize("tabFocusModeOnMsgNoKb", "Pressing Tab in the current editor will move focus to the next focusable element. The command {0} is currently not triggerable by a keybinding.");
export const tabFocusModeOffMsg = nls.localize("tabFocusModeOffMsg", "Pressing Tab in the current editor will insert the tab character. Toggle this behavior by pressing {0}.");
export const tabFocusModeOffMsgNoKb = nls.localize("tabFocusModeOffMsgNoKb", "Pressing Tab in the current editor will insert the tab character. The command {0} is currently not triggerable by a keybinding.");
export const openDocMac = nls.localize("openDocMac", "Press Command+H now to open a browser window with more information related to editor accessibility.");
export const openDocWinLinux = nls.localize("openDocWinLinux", "Press Control+H now to open a browser window with more information related to editor accessibility.");
export const outroMsg = nls.localize("outroMsg", "You can dismiss this tooltip and return to the editor by pressing Escape or Shift+Escape.");
export const showAccessibilityHelpAction = nls.localize("showAccessibilityHelpAction", "Show Accessibility Help");
}
export namespace InspectTokensNLS {
export const inspectTokensAction = nls.localize('inspectTokens', "Developer: Inspect Tokens");
}
export namespace GoToLineNLS {
export const gotoLineLabelValidLineAndColumn = nls.localize('gotoLineLabelValidLineAndColumn', "Go to line {0} and character {1}");
export const gotoLineLabelValidLine = nls.localize('gotoLineLabelValidLine', "Go to line {0}");
export const gotoLineLabelEmptyWithLineLimit = nls.localize('gotoLineLabelEmptyWithLineLimit', "Type a line number between 1 and {0} to navigate to");
export const gotoLineLabelEmptyWithLineAndColumnLimit = nls.localize('gotoLineLabelEmptyWithLineAndColumnLimit', "Type a character between 1 and {0} to navigate to");
export const gotoLineAriaLabel = nls.localize('gotoLineAriaLabel', "Current Line: {0}. Go to line {1}.");
export const gotoLineActionInput = nls.localize('gotoLineActionInput', "Type a line number, followed by an optional colon and a character number to navigate to");
export const gotoLineActionLabel = nls.localize('gotoLineActionLabel', "Go to Line...");
}
export namespace QuickCommandNLS {
export const ariaLabelEntryWithKey = nls.localize('ariaLabelEntryWithKey', "{0}, {1}, commands");
export const ariaLabelEntry = nls.localize('ariaLabelEntry', "{0}, commands");
export const quickCommandActionInput = nls.localize('quickCommandActionInput', "Type the name of an action you want to execute");
export const quickCommandActionLabel = nls.localize('quickCommandActionLabel', "Command Palette");
}
export namespace QuickOutlineNLS {
export const entryAriaLabel = nls.localize('entryAriaLabel', "{0}, symbols");
export const quickOutlineActionInput = nls.localize('quickOutlineActionInput', "Type the name of an identifier you wish to navigate to");
export const quickOutlineActionLabel = nls.localize('quickOutlineActionLabel', "Go to Symbol...");
export const _symbols_ = nls.localize('symbols', "symbols ({0})");
export const _modules_ = nls.localize('modules', "modules ({0})");
export const _class_ = nls.localize('class', "classes ({0})");
export const _interface_ = nls.localize('interface', "interfaces ({0})");
export const _method_ = nls.localize('method', "methods ({0})");
export const _function_ = nls.localize('function', "functions ({0})");
export const _property_ = nls.localize('property', "properties ({0})");
export const _variable_ = nls.localize('variable', "variables ({0})");
export const _variable2_ = nls.localize('variable2', "variables ({0})");
export const _constructor_ = nls.localize('_constructor', "constructors ({0})");
export const _call_ = nls.localize('call', "calls ({0})");
}
export namespace StandaloneCodeEditorNLS {
export const editorViewAccessibleLabel = nls.localize('editorViewAccessibleLabel', "Editor content");
export const accessibilityHelpMessageIE = nls.localize('accessibilityHelpMessageIE', "Press Ctrl+F1 for Accessibility Options.");
export const accessibilityHelpMessage = nls.localize('accessibilityHelpMessage', "Press Alt+F1 for Accessibility Options.");
}
export namespace ToggleHighContrastNLS {
export const toggleHighContrast = nls.localize('toggleHighContrast', "Toggle High Contrast Theme");
}
export namespace SimpleServicesNLS {
export const bulkEditServiceSummary = nls.localize('bulkEditServiceSummary', "Made {0} edits in {1} files");
}

View File

@@ -18,8 +18,6 @@ export const ID_INDENT_PROVIDER = 'indent';
export class IndentRangeProvider implements RangeProvider {
readonly id = ID_INDENT_PROVIDER;
readonly decorations;
constructor(private readonly editorModel: ITextModel) {
}

View File

@@ -22,6 +22,9 @@ import { IModelService } from 'vs/editor/common/services/modelService';
import { FormattingEdit } from 'vs/editor/contrib/format/formattingEdit';
import * as nls from 'vs/nls';
import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IStatusbarService } from 'vs/platform/statusbar/common/statusbar';
import { ILabelService } from 'vs/platform/label/common/label';
export function alertFormattingEdits(edits: ISingleEditOperation[]): void {
@@ -83,6 +86,32 @@ export function getRealAndSyntheticDocumentFormattersOrdered(model: ITextModel):
return result;
}
export async function formatDocumentRangeWithFirstProvider(
accessor: ServicesAccessor,
editorOrModel: ITextModel | IActiveCodeEditor,
range: Range,
token: CancellationToken
): Promise<boolean> {
const instaService = accessor.get(IInstantiationService);
const statusBarService = accessor.get(IStatusbarService);
const labelService = accessor.get(ILabelService);
const model = isCodeEditor(editorOrModel) ? editorOrModel.getModel() : editorOrModel;
const [best, ...rest] = DocumentRangeFormattingEditProviderRegistry.ordered(model);
if (!best) {
return false;
}
const ret = await instaService.invokeFunction(formatDocumentRangeWithProvider, best, editorOrModel, range, token);
if (rest.length > 0) {
statusBarService.setStatusMessage(
nls.localize('random.pick', "$(tasklist) Formatted '{0}' with '{1}'", labelService.getUriLabel(model.uri, { relative: true }), best.displayName),
5 * 1000
);
}
return ret;
}
export async function formatDocumentRangeWithProvider(
accessor: ServicesAccessor,
provider: DocumentRangeFormattingEditProvider,
@@ -152,6 +181,31 @@ export async function formatDocumentRangeWithProvider(
return true;
}
export async function formatDocumentWithFirstProvider(
accessor: ServicesAccessor,
editorOrModel: ITextModel | IActiveCodeEditor,
token: CancellationToken
): Promise<boolean> {
const instaService = accessor.get(IInstantiationService);
const statusBarService = accessor.get(IStatusbarService);
const labelService = accessor.get(ILabelService);
const model = isCodeEditor(editorOrModel) ? editorOrModel.getModel() : editorOrModel;
const [best, ...rest] = getRealAndSyntheticDocumentFormattersOrdered(model);
if (!best) {
return false;
}
const ret = await instaService.invokeFunction(formatDocumentWithProvider, best, editorOrModel, token);
if (rest.length > 0) {
statusBarService.setStatusMessage(
nls.localize('random.pick', "$(tasklist) Formatted '{0}' with '{1}'", labelService.getUriLabel(model.uri, { relative: true }), best.displayName),
5 * 1000
);
}
return ret;
}
export async function formatDocumentWithProvider(
accessor: ServicesAccessor,
provider: DocumentFormattingEditProvider,

View File

@@ -16,7 +16,7 @@ import * as editorCommon from 'vs/editor/common/editorCommon';
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
import { DocumentRangeFormattingEditProviderRegistry, OnTypeFormattingEditProviderRegistry } from 'vs/editor/common/modes';
import { IEditorWorkerService } from 'vs/editor/common/services/editorWorkerService';
import { getOnTypeFormattingEdits, formatDocumentWithProvider, formatDocumentRangeWithProvider, alertFormattingEdits, getRealAndSyntheticDocumentFormattersOrdered } from 'vs/editor/contrib/format/format';
import { getOnTypeFormattingEdits, alertFormattingEdits, formatDocumentRangeWithFirstProvider, formatDocumentWithFirstProvider } from 'vs/editor/contrib/format/format';
import { FormattingEdit } from 'vs/editor/contrib/format/formattingEdit';
import * as nls from 'vs/nls';
import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands';
@@ -211,12 +211,7 @@ class FormatOnPaste implements editorCommon.IEditorContribution {
if (this.editor.getSelections().length > 1) {
return;
}
const provider = DocumentRangeFormattingEditProviderRegistry.ordered(this.editor.getModel());
if (provider.length !== 1) {
// print status in n>1 case?
return;
}
this._instantiationService.invokeFunction(formatDocumentRangeWithProvider, provider[0], this.editor, range, CancellationToken.None).catch(onUnexpectedError);
this._instantiationService.invokeFunction(formatDocumentRangeWithFirstProvider, this.editor, range, CancellationToken.None).catch(onUnexpectedError);
}
}
@@ -227,7 +222,7 @@ class FormatDocumentAction extends EditorAction {
id: 'editor.action.formatDocument',
label: nls.localize('formatDocument.label', "Format Document"),
alias: 'Format Document',
precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasDocumentFormattingProvider, EditorContextKeys.hasMultipleDocumentFormattingProvider.toNegated()),
precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasDocumentFormattingProvider),
kbOpts: {
kbExpr: ContextKeyExpr.and(EditorContextKeys.editorTextFocus, EditorContextKeys.hasDocumentFormattingProvider),
primary: KeyMod.Shift | KeyMod.Alt | KeyCode.KEY_F,
@@ -243,14 +238,9 @@ class FormatDocumentAction extends EditorAction {
}
async run(accessor: ServicesAccessor, editor: ICodeEditor): Promise<void> {
if (!editor.hasModel()) {
return;
}
const instaService = accessor.get(IInstantiationService);
const model = editor.getModel();
const [provider] = getRealAndSyntheticDocumentFormattersOrdered(model);
if (provider) {
await instaService.invokeFunction(formatDocumentWithProvider, provider, editor, CancellationToken.None);
if (editor.hasModel()) {
const instaService = accessor.get(IInstantiationService);
await instaService.invokeFunction(formatDocumentWithFirstProvider, editor, CancellationToken.None);
}
}
}
@@ -262,7 +252,7 @@ class FormatSelectionAction extends EditorAction {
id: 'editor.action.formatSelection',
label: nls.localize('formatSelection.label', "Format Selection"),
alias: 'Format Code',
precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasDocumentSelectionFormattingProvider, EditorContextKeys.hasMultipleDocumentSelectionFormattingProvider.toNegated()),
precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasDocumentSelectionFormattingProvider),
kbOpts: {
kbExpr: ContextKeyExpr.and(EditorContextKeys.editorTextFocus, EditorContextKeys.hasDocumentSelectionFormattingProvider),
primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.KEY_F),
@@ -281,14 +271,12 @@ class FormatSelectionAction extends EditorAction {
return;
}
const instaService = accessor.get(IInstantiationService);
const [best] = DocumentRangeFormattingEditProviderRegistry.ordered(editor.getModel());
if (best) {
let range: Range = editor.getSelection();
if (range.isEmpty()) {
range = new Range(range.startLineNumber, 1, range.startLineNumber, editor.getModel().getLineMaxColumn(range.startLineNumber));
}
await instaService.invokeFunction(formatDocumentRangeWithProvider, best, editor, range, CancellationToken.None);
const model = editor.getModel();
let range: Range = editor.getSelection();
if (range.isEmpty()) {
range = new Range(range.startLineNumber, 1, range.startLineNumber, model.getLineMaxColumn(range.startLineNumber));
}
await instaService.invokeFunction(formatDocumentRangeWithFirstProvider, editor, range, CancellationToken.None);
}
}

View File

@@ -41,6 +41,7 @@ import { Action } from 'vs/base/common/actions';
import { CodeActionKind } from 'vs/editor/contrib/codeAction/codeActionTrigger';
import { IModeService } from 'vs/editor/common/services/modeService';
import { withNullAsUndefined } from 'vs/base/common/types';
import { IIdentifiedSingleEditOperation } from 'vs/editor/common/model';
const $ = dom.$;
@@ -385,10 +386,10 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
model.guessColorPresentation(color, originalText);
const updateEditorModel = () => {
let textEdits;
let newRange;
let textEdits: IIdentifiedSingleEditOperation[];
let newRange: Range;
if (model.presentation.textEdit) {
textEdits = [model.presentation.textEdit];
textEdits = [model.presentation.textEdit as IIdentifiedSingleEditOperation];
newRange = new Range(
model.presentation.textEdit.range.startLineNumber,
model.presentation.textEdit.range.startColumn,
@@ -405,7 +406,7 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
this._editor.executeEdits('colorpicker', textEdits);
if (model.presentation.additionalTextEdits) {
textEdits = [...model.presentation.additionalTextEdits];
textEdits = [...model.presentation.additionalTextEdits as IIdentifiedSingleEditOperation[]];
this._editor.executeEdits('colorpicker', textEdits);
this.hide();
}

View File

@@ -18,7 +18,38 @@ import { EmbeddedCodeEditorWidget } from 'vs/editor/browser/widget/embeddedCodeE
import { IOptions, IStyles, ZoneWidget } from 'vs/editor/contrib/zoneWidget/zoneWidget';
import * as nls from 'vs/nls';
import { ContextKeyExpr, RawContextKey } from 'vs/platform/contextkey/common/contextkey';
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { ServicesAccessor, createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { IDisposable } from 'vs/base/common/lifecycle';
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
export const IPeekViewService = createDecorator<IPeekViewService>('IPeekViewService');
export interface IPeekViewService {
_serviceBrand: any;
addExclusiveWidget(editor: ICodeEditor, widget: PeekViewWidget): void;
}
registerSingleton(IPeekViewService, class implements IPeekViewService {
_serviceBrand: any;
private _widgets = new Map<ICodeEditor, { widget: PeekViewWidget, listener: IDisposable }>();
addExclusiveWidget(editor: ICodeEditor, widget: PeekViewWidget): void {
const existing = this._widgets.get(editor);
if (existing) {
existing.listener.dispose();
existing.widget.dispose();
}
const remove = () => {
const data = this._widgets.get(editor);
if (data && data.widget === widget) {
data.listener.dispose();
this._widgets.delete(editor);
}
};
this._widgets.set(editor, { widget, listener: widget.onDidClose(remove) });
}
});
export namespace PeekContext {
export const inPeekEditor = new RawContextKey<boolean>('inReferenceSearchEditor', true);

View File

@@ -102,6 +102,7 @@ export abstract class ReferencesController implements editorCommon.IEditorContri
this._widget = this._instantiationService.createInstance(ReferenceWidget, this._editor, this._defaultTreeKeyboardSupport, data);
this._widget.setTitle(nls.localize('labelLoading', "Loading..."));
this._widget.show(range);
this._disposables.push(this._widget.onDidClose(() => {
modelPromise.cancel();
if (this._widget) {

View File

@@ -5,7 +5,7 @@
import * as dom from 'vs/base/browser/dom';
import { IMouseEvent } from 'vs/base/browser/mouseEvent';
import { ISashEvent, IVerticalSashLayoutProvider, Sash } from 'vs/base/browser/ui/sash/sash';
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 } from 'vs/base/common/lifecycle';
@@ -29,12 +29,14 @@ import { ILabelService } from 'vs/platform/label/common/label';
import { WorkbenchAsyncDataTree } from 'vs/platform/list/browser/listService';
import { activeContrastBorder, contrastBorder, registerColor } from 'vs/platform/theme/common/colorRegistry';
import { ITheme, IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService';
import { PeekViewWidget } from './peekViewWidget';
import { PeekViewWidget, IPeekViewService } from './peekViewWidget';
import { FileReferences, OneReference, ReferencesModel } from './referencesModel';
import { ITreeRenderer, IAsyncDataSource } from 'vs/base/browser/ui/tree/tree';
import { IAsyncDataTreeOptions } from 'vs/base/browser/ui/tree/asyncDataTree';
import { IListVirtualDelegate } from 'vs/base/browser/ui/list/list';
import { FuzzyScore } from 'vs/base/common/filters';
import { SplitView, Sizing } from 'vs/base/browser/ui/splitview/splitview';
class DecorationsManager implements IDisposable {
@@ -155,72 +157,6 @@ class DecorationsManager implements IDisposable {
}
}
class VSash {
private _disposables: IDisposable[] = [];
private _sash: Sash;
private _ratio: number;
private _height: number;
private _width: number;
private _onDidChangePercentages = new Emitter<VSash>();
constructor(container: HTMLElement, ratio: number) {
this._ratio = ratio;
this._sash = new Sash(container, <IVerticalSashLayoutProvider>{
getVerticalSashLeft: () => this._width * this._ratio,
getVerticalSashHeight: () => this._height
});
// compute the current widget clientX postion since
// the sash works with clientX when dragging
let clientX: number;
this._disposables.push(this._sash.onDidStart((e: ISashEvent) => {
clientX = e.startX - (this._width * this.ratio);
}));
this._disposables.push(this._sash.onDidChange((e: ISashEvent) => {
// compute the new position of the sash and from that
// compute the new ratio that we are using
let newLeft = e.currentX - clientX;
if (newLeft > 20 && newLeft + 20 < this._width) {
this._ratio = newLeft / this._width;
this._sash.layout();
this._onDidChangePercentages.fire(this);
}
}));
}
dispose() {
this._sash.dispose();
this._onDidChangePercentages.dispose();
dispose(this._disposables);
}
get onDidChangePercentages() {
return this._onDidChangePercentages.event;
}
set width(value: number) {
this._width = value;
this._sash.layout();
}
set height(value: number) {
this._height = value;
this._sash.layout();
}
get percentages() {
let left = 100 * this._ratio;
let right = 100 - left;
return [`${left}%`, `${right}%`];
}
get ratio() {
return this._ratio;
}
}
export interface LayoutData {
ratio: number;
heightInLines: number;
@@ -248,14 +184,14 @@ export class ReferenceWidget extends PeekViewWidget {
private _tree: WorkbenchAsyncDataTree<ReferencesModel | FileReferences, TreeElement, FuzzyScore>;
private _treeContainer: HTMLElement;
private _sash: VSash;
// private _sash: VSash;
private _splitView: SplitView;
private _preview: ICodeEditor;
private _previewModelReference: IReference<ITextEditorModel>;
private _previewNotAvailableMessage: TextModel;
private _previewContainer: HTMLElement;
private _messageContainer: HTMLElement;
private height: number | undefined;
private width: number | undefined;
private _dim: dom.Dimension = { height: 0, width: 0 };
constructor(
editor: ICodeEditor,
@@ -264,15 +200,25 @@ export class ReferenceWidget extends PeekViewWidget {
@IThemeService themeService: IThemeService,
@ITextModelService private readonly _textModelResolverService: ITextModelService,
@IInstantiationService private readonly _instantiationService: IInstantiationService,
@IPeekViewService private readonly _peekViewService: IPeekViewService,
@ILabelService private readonly _uriLabel: ILabelService
) {
super(editor, { showFrame: false, showArrow: true, isResizeable: true, isAccessible: true });
this._applyTheme(themeService.getTheme());
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._callOnDispose);
dispose<IDisposable>(this._preview, this._previewNotAvailableMessage, this._tree, this._previewModelReference);
this._splitView.dispose();
super.dispose();
}
private _applyTheme(theme: ITheme) {
const borderColor = theme.getColor(peekViewBorder) || Color.transparent;
this.style({
@@ -284,13 +230,6 @@ export class ReferenceWidget extends PeekViewWidget {
});
}
public dispose(): void {
this.setModel(undefined);
this._callOnDispose = dispose(this._callOnDispose);
dispose<IDisposable>(this._preview, this._previewNotAvailableMessage, this._tree, this._sash, this._previewModelReference);
super.dispose();
}
get onDidSelectReference(): Event<SelectionEvent> {
return this._onDidSelectReference.event;
}
@@ -321,6 +260,8 @@ export class ReferenceWidget extends PeekViewWidget {
this._messageContainer = dom.append(containerElement, dom.$('div.messages'));
dom.hide(this._messageContainer);
this._splitView = new SplitView(containerElement, { orientation: Orientation.HORIZONTAL });
// editor
this._previewContainer = dom.append(containerElement, dom.$('div.preview.inline'));
let options: IEditorOptions = {
@@ -342,25 +283,8 @@ export class ReferenceWidget extends PeekViewWidget {
dom.hide(this._previewContainer);
this._previewNotAvailableMessage = TextModel.createFromString(nls.localize('missingPreviewMessage', "no preview available"));
// sash
this._sash = new VSash(containerElement, this.layoutData.ratio || 0.8);
this._sash.onDidChangePercentages(() => {
let [left, right] = this._sash.percentages;
this._previewContainer.style.width = left;
this._treeContainer.style.width = right;
this._preview.layout();
this._tree.layout(this.height, this.width && this.width * (1 - this._sash.ratio));
this.layoutData.ratio = this._sash.ratio;
});
// tree
this._treeContainer = dom.append(containerElement, dom.$('div.ref-tree.inline'));
const renderers = [
this._instantiationService.createInstance(FileReferencesRenderer),
this._instantiationService.createInstance(OneReferenceRenderer),
];
const treeOptions: IAsyncDataTreeOptions<TreeElement, FuzzyScore> = {
ariaLabel: nls.localize('treeAriaLabel', "References"),
keyboardSupport: this._defaultTreeKeyboardSupport,
@@ -368,20 +292,48 @@ export class ReferenceWidget extends PeekViewWidget {
keyboardNavigationLabelProvider: this._instantiationService.createInstance(StringRepresentationProvider),
identityProvider: new IdentityProvider()
};
const treeDataSource = this._instantiationService.createInstance(DataSource);
this._tree = this._instantiationService.createInstance<HTMLElement, IListVirtualDelegate<TreeElement>, ITreeRenderer<any, FuzzyScore, any>[], IAsyncDataSource<ReferencesModel | FileReferences, TreeElement>, IAsyncDataTreeOptions<TreeElement, FuzzyScore>, WorkbenchAsyncDataTree<ReferencesModel | FileReferences, TreeElement, FuzzyScore>>(
WorkbenchAsyncDataTree,
this._treeContainer,
new Delegate(),
renderers,
treeDataSource,
[
this._instantiationService.createInstance(FileReferencesRenderer),
this._instantiationService.createInstance(OneReferenceRenderer),
],
this._instantiationService.createInstance(DataSource),
treeOptions
);
ctxReferenceWidgetSearchTreeFocused.bindTo(this._tree.contextKeyService);
// split stuff
this._splitView.addView({
onDidChange: Event.None,
element: this._previewContainer,
minimumSize: 200,
maximumSize: Number.MAX_VALUE,
layout: (width) => {
this._preview.layout({ height: this._dim.height, width });
}
}, Sizing.Distribute);
this._splitView.addView({
onDidChange: Event.None,
element: this._treeContainer,
minimumSize: 100,
maximumSize: Number.MAX_VALUE,
layout: (width) => {
this._treeContainer.style.height = `${this._dim.height}px`;
this._treeContainer.style.width = `${width}px`;
this._tree.layout(this._dim.height, width);
}
}, Sizing.Distribute);
this._splitView.onDidSashChange(() => {
if (this._dim.width) {
this.layoutData.ratio = this._splitView.getViewSize(0) / this._dim.width;
}
}, undefined, this._disposables);
// listen on selection and focus
let onEvent = (element: any, kind: 'show' | 'goto' | 'side') => {
if (element instanceof OneReference) {
@@ -428,36 +380,18 @@ export class ReferenceWidget extends PeekViewWidget {
dom.hide(this._treeContainer);
}
protected _doLayoutBody(heightInPixel: number, widthInPixel: number): void {
super._doLayoutBody(heightInPixel, widthInPixel);
this.height = heightInPixel;
this.width = widthInPixel;
const height = heightInPixel + 'px';
this._sash.height = heightInPixel;
this._sash.width = widthInPixel;
// set height/width
const [left, right] = this._sash.percentages;
this._previewContainer.style.height = height;
this._previewContainer.style.width = left;
this._treeContainer.style.height = height;
this._treeContainer.style.width = right;
// forward
this._tree.layout(heightInPixel, widthInPixel * (1 - this._sash.ratio));
this._preview.layout();
// store layout data
this.layoutData = {
heightInLines: this._viewZone ? this._viewZone.heightInLines : 0,
ratio: this._sash.ratio
};
protected _onWidth(width: number) {
if (this._dim) {
this._doLayoutBody(this._dim.height, width);
}
}
public _onWidth(widthInPixel: number): void {
this._sash.width = widthInPixel;
this._preview.layout();
protected _doLayoutBody(heightInPixel: number, widthInPixel: number): void {
super._doLayoutBody(heightInPixel, widthInPixel);
this._dim = { height: heightInPixel, width: widthInPixel };
this.layoutData.heightInLines = this._viewZone ? this._viewZone.heightInLines : this.layoutData.heightInLines;
this._splitView.layout(widthInPixel);
this._splitView.resizeView(0, widthInPixel * this.layoutData.ratio);
}
public setSelection(selection: OneReference): Promise<any> {
@@ -522,8 +456,7 @@ export class ReferenceWidget extends PeekViewWidget {
dom.addClass(this.container, 'results-loaded');
dom.show(this._treeContainer);
dom.show(this._previewContainer);
this._preview.layout();
this._tree.layout();
this._splitView.layout(this._dim.width);
this.focus();
// pick input and a reference to begin with

View File

@@ -116,7 +116,7 @@ export class RenameInputField implements IContentWidget, IDisposable {
}
private _currentAcceptInput: (() => void) | null = null;
private _currentCancelInput: ((focusEditor) => void) | null = null;
private _currentCancelInput: ((focusEditor: boolean) => void) | null = null;
public acceptInput(): void {
if (this._currentAcceptInput) {
@@ -144,7 +144,7 @@ export class RenameInputField implements IContentWidget, IDisposable {
this._hide();
};
return new Promise<string>(resolve => {
return new Promise<string | boolean>(resolve => {
this._currentCancelInput = (focusEditor) => {
this._currentAcceptInput = null;

View File

@@ -41,3 +41,7 @@ import 'vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode';
import 'vs/editor/contrib/wordHighlighter/wordHighlighter';
import 'vs/editor/contrib/wordOperations/wordOperations';
import 'vs/editor/contrib/wordPartOperations/wordPartOperations';
// Load up these strings even in VSCode, even if they are not used
// in order to get them translated
import 'vs/editor/common/standaloneStrings';

View File

@@ -4,7 +4,6 @@
*--------------------------------------------------------------------------------------------*/
import 'vs/css!./accessibilityHelp';
import * as nls from 'vs/nls';
import * as browser from 'vs/base/browser/browser';
import * as dom from 'vs/base/browser/dom';
import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';
@@ -31,6 +30,7 @@ import { IOpenerService } from 'vs/platform/opener/common/opener';
import { contrastBorder, editorWidgetBackground, widgetShadow } from 'vs/platform/theme/common/colorRegistry';
import { registerThemingParticipant } from 'vs/platform/theme/common/themeService';
import { AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility';
import { AccessibilityHelpNLS } from 'vs/editor/common/standaloneStrings';
const CONTEXT_ACCESSIBILITY_WIDGET_VISIBLE = new RawContextKey<boolean>('accessibilityHelpWidgetVisible', false);
@@ -72,31 +72,26 @@ class AccessibilityHelpController extends Disposable
}
}
const nlsNoSelection = nls.localize("noSelection", "No selection");
const nlsSingleSelectionRange = nls.localize("singleSelectionRange", "Line {0}, Column {1} ({2} selected)");
const nlsSingleSelection = nls.localize("singleSelection", "Line {0}, Column {1}");
const nlsMultiSelectionRange = nls.localize("multiSelectionRange", "{0} selections ({1} characters selected)");
const nlsMultiSelection = nls.localize("multiSelection", "{0} selections");
function getSelectionLabel(selections: Selection[] | null, charactersSelected: number): string {
if (!selections || selections.length === 0) {
return nlsNoSelection;
return AccessibilityHelpNLS.noSelection;
}
if (selections.length === 1) {
if (charactersSelected) {
return strings.format(nlsSingleSelectionRange, selections[0].positionLineNumber, selections[0].positionColumn, charactersSelected);
return strings.format(AccessibilityHelpNLS.singleSelectionRange, selections[0].positionLineNumber, selections[0].positionColumn, charactersSelected);
}
return strings.format(nlsSingleSelection, selections[0].positionLineNumber, selections[0].positionColumn);
return strings.format(AccessibilityHelpNLS.singleSelection, selections[0].positionLineNumber, selections[0].positionColumn);
}
if (charactersSelected) {
return strings.format(nlsMultiSelectionRange, selections.length, charactersSelected);
return strings.format(AccessibilityHelpNLS.multiSelectionRange, selections.length, charactersSelected);
}
if (selections.length > 0) {
return strings.format(nlsMultiSelection, selections.length);
return strings.format(AccessibilityHelpNLS.multiSelection, selections.length);
}
return '';
@@ -151,7 +146,7 @@ class AccessibilityHelpWidget extends Widget implements IOverlayWidget {
}
if (e.equals(KeyMod.CtrlCmd | KeyCode.KEY_E)) {
alert(nls.localize("emergencyConfOn", "Now changing the setting `accessibilitySupport` to 'on'."));
alert(AccessibilityHelpNLS.emergencyConfOn);
this._editor.updateOptions({
accessibilitySupport: 'on'
@@ -166,7 +161,7 @@ class AccessibilityHelpWidget extends Widget implements IOverlayWidget {
}
if (e.equals(KeyMod.CtrlCmd | KeyCode.KEY_H)) {
alert(nls.localize("openingDocs", "Now opening the Editor Accessibility documentation page."));
alert(AccessibilityHelpNLS.openingDocs);
let url = (<IEditorConstructionOptions>this._editor.getRawConfiguration()).accessibilityHelpUrl;
if (typeof url === 'undefined') {
@@ -246,56 +241,52 @@ class AccessibilityHelpWidget extends Widget implements IOverlayWidget {
if (opts.wrappingInfo.inDiffEditor) {
if (opts.readOnly) {
text += nls.localize("readonlyDiffEditor", " in a read-only pane of a diff editor.");
text += AccessibilityHelpNLS.readonlyDiffEditor;
} else {
text += nls.localize("editableDiffEditor", " in a pane of a diff editor.");
text += AccessibilityHelpNLS.editableDiffEditor;
}
} else {
if (opts.readOnly) {
text += nls.localize("readonlyEditor", " in a read-only code editor");
text += AccessibilityHelpNLS.readonlyEditor;
} else {
text += nls.localize("editableEditor", " in a code editor");
text += AccessibilityHelpNLS.editableEditor;
}
}
const turnOnMessage = (
platform.isMacintosh
? nls.localize("changeConfigToOnMac", "To configure the editor to be optimized for usage with a Screen Reader press Command+E now.")
: nls.localize("changeConfigToOnWinLinux", "To configure the editor to be optimized for usage with a Screen Reader press Control+E now.")
? AccessibilityHelpNLS.changeConfigToOnMac
: AccessibilityHelpNLS.changeConfigToOnWinLinux
);
switch (opts.accessibilitySupport) {
case AccessibilitySupport.Unknown:
text += '\n\n - ' + turnOnMessage;
break;
case AccessibilitySupport.Enabled:
text += '\n\n - ' + nls.localize("auto_on", "The editor is configured to be optimized for usage with a Screen Reader.");
text += '\n\n - ' + AccessibilityHelpNLS.auto_on;
break;
case AccessibilitySupport.Disabled:
text += '\n\n - ' + nls.localize("auto_off", "The editor is configured to never be optimized for usage with a Screen Reader, which is not the case at this time.");
text += '\n\n - ' + AccessibilityHelpNLS.auto_off;
text += ' ' + turnOnMessage;
break;
}
const NLS_TAB_FOCUS_MODE_ON = nls.localize("tabFocusModeOnMsg", "Pressing Tab in the current editor will move focus to the next focusable element. Toggle this behavior by pressing {0}.");
const NLS_TAB_FOCUS_MODE_ON_NO_KB = nls.localize("tabFocusModeOnMsgNoKb", "Pressing Tab in the current editor will move focus to the next focusable element. The command {0} is currently not triggerable by a keybinding.");
const NLS_TAB_FOCUS_MODE_OFF = nls.localize("tabFocusModeOffMsg", "Pressing Tab in the current editor will insert the tab character. Toggle this behavior by pressing {0}.");
const NLS_TAB_FOCUS_MODE_OFF_NO_KB = nls.localize("tabFocusModeOffMsgNoKb", "Pressing Tab in the current editor will insert the tab character. The command {0} is currently not triggerable by a keybinding.");
if (opts.tabFocusMode) {
text += '\n\n - ' + this._descriptionForCommand(ToggleTabFocusModeAction.ID, NLS_TAB_FOCUS_MODE_ON, NLS_TAB_FOCUS_MODE_ON_NO_KB);
text += '\n\n - ' + this._descriptionForCommand(ToggleTabFocusModeAction.ID, AccessibilityHelpNLS.tabFocusModeOnMsg, AccessibilityHelpNLS.tabFocusModeOnMsgNoKb);
} else {
text += '\n\n - ' + this._descriptionForCommand(ToggleTabFocusModeAction.ID, NLS_TAB_FOCUS_MODE_OFF, NLS_TAB_FOCUS_MODE_OFF_NO_KB);
text += '\n\n - ' + this._descriptionForCommand(ToggleTabFocusModeAction.ID, AccessibilityHelpNLS.tabFocusModeOffMsg, AccessibilityHelpNLS.tabFocusModeOffMsgNoKb);
}
const openDocMessage = (
platform.isMacintosh
? nls.localize("openDocMac", "Press Command+H now to open a browser window with more information related to editor accessibility.")
: nls.localize("openDocWinLinux", "Press Control+H now to open a browser window with more information related to editor accessibility.")
? AccessibilityHelpNLS.openDocMac
: AccessibilityHelpNLS.openDocWinLinux
);
text += '\n\n - ' + openDocMessage;
text += '\n\n' + nls.localize("outroMsg", "You can dismiss this tooltip and return to the editor by pressing Escape or Shift+Escape.");
text += '\n\n' + AccessibilityHelpNLS.outroMsg;
this._contentDomNode.domNode.appendChild(renderFormattedText(text));
// Per https://www.w3.org/TR/wai-aria/roles#document, Authors SHOULD provide a title or label for documents
@@ -337,7 +328,7 @@ class ShowAccessibilityHelpAction extends EditorAction {
constructor() {
super({
id: 'editor.action.showAccessibilityHelp',
label: nls.localize("ShowAccessibilityHelpAction", "Show Accessibility Help"),
label: AccessibilityHelpNLS.showAccessibilityHelpAction,
alias: 'Show Accessibility Help',
precondition: null,
kbOpts: {

View File

@@ -4,7 +4,6 @@
*--------------------------------------------------------------------------------------------*/
import 'vs/css!./inspectTokens';
import * as nls from 'vs/nls';
import { CharCode } from 'vs/base/common/charCode';
import { Color } from 'vs/base/common/color';
import { Disposable } from 'vs/base/common/lifecycle';
@@ -21,6 +20,7 @@ import { IModeService } from 'vs/editor/common/services/modeService';
import { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneThemeService';
import { editorHoverBackground, editorHoverBorder } from 'vs/platform/theme/common/colorRegistry';
import { HIGH_CONTRAST, registerThemingParticipant } from 'vs/platform/theme/common/themeService';
import { InspectTokensNLS } from 'vs/editor/common/standaloneStrings';
class InspectTokensController extends Disposable implements IEditorContribution {
@@ -82,7 +82,7 @@ class InspectTokens extends EditorAction {
constructor() {
super({
id: 'editor.action.inspectTokens',
label: nls.localize('inspectTokens', "Developer: Inspect Tokens"),
label: InspectTokensNLS.inspectTokensAction,
alias: 'Developer: Inspect Tokens',
precondition: null
});

View File

@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import 'vs/css!./gotoLine';
import * as nls from 'vs/nls';
import * as strings from 'vs/base/common/strings';
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
import { QuickOpenEntry, QuickOpenModel } from 'vs/base/parts/quickopen/browser/quickOpenModel';
import { IAutoFocus, Mode, IEntryRunContext } from 'vs/base/parts/quickopen/common/quickOpen';
@@ -17,6 +17,7 @@ import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
import { ITextModel } from 'vs/editor/common/model';
import { BaseEditorQuickOpenAction, IDecorator } from 'vs/editor/standalone/browser/quickOpen/editorQuickOpen';
import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
import { GoToLineNLS } from 'vs/editor/common/standaloneStrings';
interface ParseResult {
position: Position;
@@ -62,14 +63,14 @@ export class GotoLineEntry extends QuickOpenEntry {
if (isValid) {
if (position.column && position.column > 1) {
label = nls.localize('gotoLineLabelValidLineAndColumn', "Go to line {0} and character {1}", position.lineNumber, position.column);
label = strings.format(GoToLineNLS.gotoLineLabelValidLineAndColumn, position.lineNumber, position.column);
} else {
label = nls.localize('gotoLineLabelValidLine', "Go to line {0}", position.lineNumber, position.column);
label = strings.format(GoToLineNLS.gotoLineLabelValidLine, position.lineNumber);
}
} else if (position.lineNumber < 1 || position.lineNumber > (model ? model.getLineCount() : 0)) {
label = nls.localize('gotoLineLabelEmptyWithLineLimit', "Type a line number between 1 and {0} to navigate to", model ? model.getLineCount() : 0);
label = strings.format(GoToLineNLS.gotoLineLabelEmptyWithLineLimit, model ? model.getLineCount() : 0);
} else {
label = nls.localize('gotoLineLabelEmptyWithLineAndColumnLimit', "Type a character between 1 and {0} to navigate to", model ? model.getLineMaxColumn(position.lineNumber) : 0);
label = strings.format(GoToLineNLS.gotoLineLabelEmptyWithLineAndColumnLimit, model ? model.getLineMaxColumn(position.lineNumber) : 0);
}
return {
@@ -86,7 +87,7 @@ export class GotoLineEntry extends QuickOpenEntry {
getAriaLabel(): string {
const position = this.editor.getPosition();
const currentLine = position ? position.lineNumber : 0;
return nls.localize('gotoLineAriaLabel', "Current Line: {0}. Go to line {0}.", currentLine, this.parseResult.label);
return strings.format(GoToLineNLS.gotoLineAriaLabel, currentLine, this.parseResult.label);
}
run(mode: Mode, _context: IEntryRunContext): boolean {
@@ -144,9 +145,9 @@ export class GotoLineEntry extends QuickOpenEntry {
export class GotoLineAction extends BaseEditorQuickOpenAction {
constructor() {
super(nls.localize('gotoLineActionInput', "Type a line number, followed by an optional colon and a character number to navigate to"), {
super(GoToLineNLS.gotoLineActionInput, {
id: 'editor.action.gotoLine',
label: nls.localize('GotoLineAction.label', "Go to Line..."),
label: GoToLineNLS.gotoLineActionLabel,
alias: 'Go to Line...',
precondition: null,
kbOpts: {

View File

@@ -3,7 +3,7 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as nls from 'vs/nls';
import * as strings from 'vs/base/common/strings';
import * as browser from 'vs/base/browser/browser';
import { onUnexpectedError } from 'vs/base/common/errors';
import { matchesFuzzy } from 'vs/base/common/filters';
@@ -17,6 +17,7 @@ import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
import { BaseEditorQuickOpenAction } from 'vs/editor/standalone/browser/quickOpen/editorQuickOpen';
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
import { QuickCommandNLS } from 'vs/editor/common/standaloneStrings';
export class EditorActionCommandEntry extends QuickOpenEntryGroup {
private readonly key: string;
@@ -40,10 +41,10 @@ export class EditorActionCommandEntry extends QuickOpenEntryGroup {
public getAriaLabel(): string {
if (this.keyAriaLabel) {
return nls.localize('ariaLabelEntryWithKey', "{0}, {1}, commands", this.getLabel(), this.keyAriaLabel);
return strings.format(QuickCommandNLS.ariaLabelEntryWithKey, this.getLabel(), this.keyAriaLabel);
}
return nls.localize('ariaLabelEntry', "{0}, commands", this.getLabel());
return strings.format(QuickCommandNLS.ariaLabelEntry, this.getLabel());
}
public getGroupLabel(): string {
@@ -77,9 +78,9 @@ export class EditorActionCommandEntry extends QuickOpenEntryGroup {
export class QuickCommandAction extends BaseEditorQuickOpenAction {
constructor() {
super(nls.localize('quickCommandActionInput', "Type the name of an action you want to execute"), {
super(QuickCommandNLS.quickCommandActionInput, {
id: 'editor.action.quickCommand',
label: nls.localize('QuickCommandAction.label', "Command Palette"),
label: QuickCommandNLS.quickCommandActionLabel,
alias: 'Command Palette',
precondition: null,
kbOpts: {

View File

@@ -4,7 +4,6 @@
*--------------------------------------------------------------------------------------------*/
import 'vs/css!./quickOutline';
import * as nls from 'vs/nls';
import { CancellationToken } from 'vs/base/common/cancellation';
import { matchesFuzzy } from 'vs/base/common/filters';
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
@@ -20,6 +19,7 @@ import { DocumentSymbol, DocumentSymbolProviderRegistry, symbolKindToCssClass }
import { getDocumentSymbols } from 'vs/editor/contrib/quickOpen/quickOpen';
import { BaseEditorQuickOpenAction, IDecorator } from 'vs/editor/standalone/browser/quickOpen/editorQuickOpen';
import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
import { QuickOutlineNLS } from 'vs/editor/common/standaloneStrings';
let SCOPE_PREFIX = ':';
@@ -48,7 +48,7 @@ export class SymbolEntry extends QuickOpenEntryGroup {
}
public getAriaLabel(): string {
return nls.localize('entryAriaLabel', "{0}, symbols", this.name);
return strings.format(QuickOutlineNLS.entryAriaLabel, this.name);
}
public getIcon(): string {
@@ -111,9 +111,9 @@ export class SymbolEntry extends QuickOpenEntryGroup {
export class QuickOutlineAction extends BaseEditorQuickOpenAction {
constructor() {
super(nls.localize('quickOutlineActionInput', "Type the name of an identifier you wish to navigate to"), {
super(QuickOutlineNLS.quickOutlineActionInput, {
id: 'editor.action.quickOutline',
label: nls.localize('QuickOutlineAction.label', "Go to Symbol..."),
label: QuickOutlineNLS.quickOutlineActionLabel,
alias: 'Go to Symbol...',
precondition: EditorContextKeys.hasDocumentSymbolProvider,
kbOpts: {
@@ -249,7 +249,7 @@ export class QuickOutlineAction extends BaseEditorQuickOpenAction {
// Mark first entry as outline
else if (results.length > 0) {
results[0].setGroupLabel(nls.localize('symbols', "symbols ({0})", results.length));
results[0].setGroupLabel(strings.format(QuickOutlineNLS._symbols_, results.length));
}
return results;
@@ -257,16 +257,16 @@ export class QuickOutlineAction extends BaseEditorQuickOpenAction {
private typeToLabel(type: string, count: number): string {
switch (type) {
case 'module': return nls.localize('modules', "modules ({0})", count);
case 'class': return nls.localize('class', "classes ({0})", count);
case 'interface': return nls.localize('interface', "interfaces ({0})", count);
case 'method': return nls.localize('method', "methods ({0})", count);
case 'function': return nls.localize('function', "functions ({0})", count);
case 'property': return nls.localize('property', "properties ({0})", count);
case 'variable': return nls.localize('variable', "variables ({0})", count);
case 'var': return nls.localize('variable2', "variables ({0})", count);
case 'constructor': return nls.localize('_constructor', "constructors ({0})", count);
case 'call': return nls.localize('call', "calls ({0})", count);
case 'module': return strings.format(QuickOutlineNLS._modules_, count);
case 'class': return strings.format(QuickOutlineNLS._class_, count);
case 'interface': return strings.format(QuickOutlineNLS._interface_, count);
case 'method': return strings.format(QuickOutlineNLS._method_, count);
case 'function': return strings.format(QuickOutlineNLS._function_, count);
case 'property': return strings.format(QuickOutlineNLS._property_, count);
case 'variable': return strings.format(QuickOutlineNLS._variable_, count);
case 'var': return strings.format(QuickOutlineNLS._variable2_, count);
case 'constructor': return strings.format(QuickOutlineNLS._constructor_, count);
case 'call': return strings.format(QuickOutlineNLS._call_, count);
}
return type;

View File

@@ -3,7 +3,7 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { localize } from 'vs/nls';
import * as strings from 'vs/base/common/strings';
import * as dom from 'vs/base/browser/dom';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { Emitter, Event } from 'vs/base/common/event';
@@ -43,6 +43,7 @@ import { ITelemetryInfo, ITelemetryService } from 'vs/platform/telemetry/common/
import { IWorkspace, IWorkspaceContextService, IWorkspaceFolder, IWorkspaceFoldersChangeEvent, WorkbenchState, WorkspaceFolder } from 'vs/platform/workspace/common/workspace';
import { ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces';
import { ILayoutService, IDimension } from 'vs/platform/layout/browser/layoutService';
import { SimpleServicesNLS } from 'vs/editor/common/standaloneStrings';
export class SimpleModel implements IResolvedTextEditorModel {
@@ -612,7 +613,7 @@ export class SimpleBulkEditService implements IBulkEditService {
return Promise.resolve({
selection: undefined,
ariaSummary: localize('summary', 'Made {0} edits in {1} files', totalEdits, totalFiles)
ariaSummary: strings.format(SimpleServicesNLS.bulkEditServiceSummary, totalEdits, totalFiles)
});
}
}

View File

@@ -3,7 +3,6 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as nls from 'vs/nls';
import * as browser from 'vs/base/browser/browser';
import * as aria from 'vs/base/browser/ui/aria/aria';
import { Disposable, IDisposable, combinedDisposable, toDisposable } from 'vs/base/common/lifecycle';
@@ -29,6 +28,7 @@ import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { INotificationService } from 'vs/platform/notification/common/notification';
import { IThemeService } from 'vs/platform/theme/common/themeService';
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { StandaloneCodeEditorNLS } from 'vs/editor/common/standaloneStrings';
/**
* Description of an action contribution
@@ -168,11 +168,11 @@ export class StandaloneCodeEditor extends CodeEditorWidget implements IStandalon
@IAccessibilityService accessibilityService: IAccessibilityService
) {
options = options || {};
options.ariaLabel = options.ariaLabel || nls.localize('editorViewAccessibleLabel', "Editor content");
options.ariaLabel = options.ariaLabel || StandaloneCodeEditorNLS.editorViewAccessibleLabel;
options.ariaLabel = options.ariaLabel + ';' + (
browser.isIE
? nls.localize('accessibilityHelpMessageIE', "Press Ctrl+F1 for Accessibility Options.")
: nls.localize('accessibilityHelpMessage', "Press Alt+F1 for Accessibility Options.")
? StandaloneCodeEditorNLS.accessibilityHelpMessageIE
: StandaloneCodeEditorNLS.accessibilityHelpMessage
);
super(domElement, options, {}, instantiationService, codeEditorService, commandService, contextKeyService, themeService, notificationService, accessibilityService);

View File

@@ -3,10 +3,10 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as nls from 'vs/nls';
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
import { EditorAction, ServicesAccessor, registerEditorAction } from 'vs/editor/browser/editorExtensions';
import { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneThemeService';
import { ToggleHighContrastNLS } from 'vs/editor/common/standaloneStrings';
class ToggleHighContrast extends EditorAction {
@@ -15,7 +15,7 @@ class ToggleHighContrast extends EditorAction {
constructor() {
super({
id: 'editor.action.toggleHighContrast',
label: nls.localize('toggleHighContrast', "Toggle High Contrast Theme"),
label: ToggleHighContrastNLS.toggleHighContrast,
alias: 'Toggle High Contrast Theme',
precondition: null
});

View File

@@ -18,7 +18,7 @@ suite('Editor Modes - textToHtmlTokenizer', () => {
test('TextToHtmlTokenizer 1', () => {
let mode = new Mode();
let support = TokenizationRegistry.get(mode.getId());
let support = TokenizationRegistry.get(mode.getId())!;
let actual = tokenizeToString('.abc..def...gh', support);
let expected = [
@@ -38,7 +38,7 @@ suite('Editor Modes - textToHtmlTokenizer', () => {
test('TextToHtmlTokenizer 2', () => {
let mode = new Mode();
let support = TokenizationRegistry.get(mode.getId());
let support = TokenizationRegistry.get(mode.getId())!;
let actual = tokenizeToString('.abc..def...gh\n.abc..def...gh', support);
let expected1 = [