Fixes for jsonc mode. Fixes #39199

This commit is contained in:
Martin Aeschlimann 2017-11-27 23:41:49 +01:00
parent 936f4f6a90
commit 76989b38ff
13 changed files with 18 additions and 16 deletions

View file

@ -10,7 +10,7 @@
"Other"
],
"activationEvents": [
"onLanguage:json"
"onLanguage:json", "onLanguage:jsonc"
],
"main": "./out/extension",
"scripts": {

View file

@ -60,7 +60,7 @@ function registerKeybindingsCompletions(): vscode.Disposable {
}
function registerSettingsCompletions(): vscode.Disposable {
return vscode.languages.registerCompletionItemProvider({ language: 'json', pattern: '**/settings.json' }, {
return vscode.languages.registerCompletionItemProvider({ language: 'jsonc', pattern: '**/settings.json' }, {
provideCompletionItems(document, position, token) {
return new SettingsDocument(document).provideCompletionItems(position, token);
}
@ -173,7 +173,7 @@ function updateLaunchJsonDecorations(editor: vscode.TextEditor | undefined): voi
editor.setDecorations(decoration, ranges);
}
vscode.languages.registerDocumentSymbolProvider({ pattern: '**/launch.json', language: 'json' }, {
vscode.languages.registerDocumentSymbolProvider({ pattern: '**/launch.json', language: 'jsonc' }, {
provideDocumentSymbols(document: vscode.TextDocument, token: vscode.CancellationToken): vscode.ProviderResult<vscode.SymbolInformation[]> {
const result: vscode.SymbolInformation[] = [];
let name: string = '';

View file

@ -56,7 +56,7 @@
"filenames": [
"settings.json",
"launch.json",
"debug.json",
"tasks.json",
"keybindings.json"
],
"configuration": "./language-configuration.json"

View file

@ -10,7 +10,7 @@
"dependencies": {
"jsonc-parser": "^1.0.0",
"request-light": "^0.2.1",
"vscode-json-languageservice": "^3.0.2",
"vscode-json-languageservice": "^3.0.3",
"vscode-languageserver": "^3.5.0",
"vscode-nls": "^2.0.2",
"vscode-uri": "^1.0.1"

View file

@ -161,7 +161,7 @@ connection.onDidChangeConfiguration((change) => {
let enableFormatter = settings && settings.json && settings.json.format && settings.json.format.enable;
if (enableFormatter) {
if (!formatterRegistration) {
formatterRegistration = connection.client.register(DocumentRangeFormattingRequest.type, { documentSelector: [{ language: 'json' }] });
formatterRegistration = connection.client.register(DocumentRangeFormattingRequest.type, { documentSelector: [{ language: 'json' }, { language: 'jsonc' }] });
}
} else if (formatterRegistration) {
formatterRegistration.then(r => r.dispose());

View file

@ -52,9 +52,9 @@ request-light@^0.2.1:
https-proxy-agent "^0.3.5"
vscode-nls "^2.0.2"
vscode-json-languageservice@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-3.0.2.tgz#66762127f24d32709ea5f410c58080ed8059d1e2"
vscode-json-languageservice@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-3.0.3.tgz#d865450a86dd3229bfac83a4245b38281e2dffb3"
dependencies:
jsonc-parser "^1.0.0"
vscode-languageserver-types "^3.5.0"

View file

@ -55,6 +55,7 @@ export interface IJSONSchema {
markdownEnumDescriptions?: string[]; // VSCode extension
markdownDescription?: string; // VSCode extension
doNotSuggest?: boolean; // VSCode extension
allowComments?: boolean; // VSCode extension
}
export interface IJSONSchemaMap {

View file

@ -379,7 +379,7 @@ export class ConfigurationManager implements IConfigurationManager {
public canSetBreakpointsIn(model: IModel): boolean {
const modeId = model ? model.getLanguageIdentifier().language : null;
if (!modeId || modeId === 'json') {
if (!modeId || modeId === 'jsonc') {
// do not allow breakpoints in our settings files
return false;
}

View file

@ -606,7 +606,7 @@ export class FeedbackWidgetRenderer extends Disposable {
JSON.stringify(feedbackQuery, undefined, ' ') + '\n\n' +
actualResultNames.map(name => `// ${name}: ${result.metadata.scoredResults[name]}`).join('\n');
this.editorService.openEditor({ contents, language: 'json' }, /*sideBySide=*/true).then(feedbackEditor => {
this.editorService.openEditor({ contents, language: 'jsonc' }, /*sideBySide=*/true).then(feedbackEditor => {
const sendFeedbackWidget = this._register(this.instantiationService.createInstance(FloatingClickWidget, feedbackEditor.getControl(), 'Send feedback', null));
sendFeedbackWidget.render();

View file

@ -111,7 +111,7 @@ export class PreferencesService extends Disposable implements IPreferencesServic
if (this.isDefaultSettingsResource(uri) || this.isDefaultResourceSettingsResource(uri)) {
const scope = this.isDefaultSettingsResource(uri) ? ConfigurationScope.WINDOW : ConfigurationScope.RESOURCE;
const mode = this.modeService.getOrCreateMode('json');
const mode = this.modeService.getOrCreateMode('jsonc');
const model = this._register(this.modelService.createModel('', mode, uri));
let defaultSettings: DefaultSettings;
@ -139,14 +139,14 @@ export class PreferencesService extends Disposable implements IPreferencesServic
if (this.defaultSettingsRawResource.toString() === uri.toString()) {
let defaultSettings: DefaultSettings = this.getDefaultSettings(ConfigurationScope.WINDOW);
const mode = this.modeService.getOrCreateMode('json');
const mode = this.modeService.getOrCreateMode('jsonc');
const model = this._register(this.modelService.createModel(defaultSettings.raw, mode, uri));
return TPromise.as(model);
}
if (this.defaultKeybindingsResource.toString() === uri.toString()) {
const defaultKeybindingsEditorModel = this.instantiationService.createInstance(DefaultKeybindingsEditorModel, uri);
const mode = this.modeService.getOrCreateMode('json');
const mode = this.modeService.getOrCreateMode('jsonc');
const model = this._register(this.modelService.createModel(defaultKeybindingsEditorModel.content, mode, uri));
return TPromise.as(model);
}

View file

@ -125,7 +125,7 @@ export class PreferencesContribution implements IWorkbenchContribution {
let schema = schemaRegistry.getSchemaContributions().schemas[uri.toString()];
if (schema) {
const modelContent = JSON.stringify(schema);
const mode = this.modeService.getOrCreateMode('json');
const mode = this.modeService.getOrCreateMode('jsonc');
const model = this.modelService.createModel(modelContent, mode, uri);
let disposables = [];

View file

@ -210,6 +210,7 @@ export class Snippet {
const schemaId = 'vscode://schemas/snippets';
const schema: IJSONSchema = {
'id': schemaId,
'allowComments': true,
'defaultSnippets': [{
'label': nls.localize('snippetSchema.json.default', "Empty snippet"),
'body': { '${1:snippetName}': { 'prefix': '${2:prefix}', 'body': '${3:snippet}', 'description': '${4:description}' } }

View file

@ -198,7 +198,7 @@ class GenerateColorThemeAction extends Action {
colors: resultingColors,
tokenColors: theme.tokenColors
}, null, '\t');
return this.editorService.openEditor({ contents, language: 'json' });
return this.editorService.openEditor({ contents, language: 'jsonc' });
}
}