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" "Other"
], ],
"activationEvents": [ "activationEvents": [
"onLanguage:json" "onLanguage:json", "onLanguage:jsonc"
], ],
"main": "./out/extension", "main": "./out/extension",
"scripts": { "scripts": {

View file

@ -60,7 +60,7 @@ function registerKeybindingsCompletions(): vscode.Disposable {
} }
function registerSettingsCompletions(): 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) { provideCompletionItems(document, position, token) {
return new SettingsDocument(document).provideCompletionItems(position, token); return new SettingsDocument(document).provideCompletionItems(position, token);
} }
@ -173,7 +173,7 @@ function updateLaunchJsonDecorations(editor: vscode.TextEditor | undefined): voi
editor.setDecorations(decoration, ranges); 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[]> { provideDocumentSymbols(document: vscode.TextDocument, token: vscode.CancellationToken): vscode.ProviderResult<vscode.SymbolInformation[]> {
const result: vscode.SymbolInformation[] = []; const result: vscode.SymbolInformation[] = [];
let name: string = ''; let name: string = '';

View file

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

View file

@ -10,7 +10,7 @@
"dependencies": { "dependencies": {
"jsonc-parser": "^1.0.0", "jsonc-parser": "^1.0.0",
"request-light": "^0.2.1", "request-light": "^0.2.1",
"vscode-json-languageservice": "^3.0.2", "vscode-json-languageservice": "^3.0.3",
"vscode-languageserver": "^3.5.0", "vscode-languageserver": "^3.5.0",
"vscode-nls": "^2.0.2", "vscode-nls": "^2.0.2",
"vscode-uri": "^1.0.1" "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; let enableFormatter = settings && settings.json && settings.json.format && settings.json.format.enable;
if (enableFormatter) { if (enableFormatter) {
if (!formatterRegistration) { 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) { } else if (formatterRegistration) {
formatterRegistration.then(r => r.dispose()); formatterRegistration.then(r => r.dispose());

View file

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

View file

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

View file

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

View file

@ -606,7 +606,7 @@ export class FeedbackWidgetRenderer extends Disposable {
JSON.stringify(feedbackQuery, undefined, ' ') + '\n\n' + JSON.stringify(feedbackQuery, undefined, ' ') + '\n\n' +
actualResultNames.map(name => `// ${name}: ${result.metadata.scoredResults[name]}`).join('\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)); const sendFeedbackWidget = this._register(this.instantiationService.createInstance(FloatingClickWidget, feedbackEditor.getControl(), 'Send feedback', null));
sendFeedbackWidget.render(); sendFeedbackWidget.render();

View file

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

View file

@ -125,7 +125,7 @@ export class PreferencesContribution implements IWorkbenchContribution {
let schema = schemaRegistry.getSchemaContributions().schemas[uri.toString()]; let schema = schemaRegistry.getSchemaContributions().schemas[uri.toString()];
if (schema) { if (schema) {
const modelContent = JSON.stringify(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); const model = this.modelService.createModel(modelContent, mode, uri);
let disposables = []; let disposables = [];

View file

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

View file

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