Skip to content

Commit e197b9f

Browse files
authored
change the schema service to accept an object instead of a JSON string (#53)
1 parent 88c4c1b commit e197b9f

File tree

8 files changed

+20
-37
lines changed

8 files changed

+20
-37
lines changed

language-service/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11

2+
#### 0.5.4
3+
Change schema service to use a schema object instead of a JSON string [#PR-53](https://github.com/Microsoft/azure-pipelines-language-server/pull/53)
4+
25
#### 0.5.3
36
Improve performance [#PR-51](https://github.com/Microsoft/azure-pipelines-language-server/pull/51)
47
Improve error messages and suggestions [#PR-52](https://github.com/Microsoft/azure-pipelines-language-server/pull/52)

language-service/package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

language-service/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "azure-pipelines-language-service",
33
"description": "Azure Pipelines language service",
4-
"version": "0.5.3",
4+
"version": "0.5.4",
55
"author": "Microsoft",
66
"license": "MIT",
77
"main": "./lib/src/index.js",

language-service/src/services/jsonSchemaService.ts

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,8 @@ import {SchemaRequestService, WorkspaceContextService, PromiseConstructor, Thena
1515
import * as nls from 'vscode-nls';
1616
const localize = nls.loadMessageBundle();
1717

18-
/**
19-
* getParseErrorMessage has been removed from jsonc-parser since 1.0.0
20-
*
21-
* see https://github.com/Microsoft/node-jsonc-parser/blob/42ec16f9c91582d4267a0c48199cdac283c90fc9/CHANGELOG.md
22-
* 1.0.0
23-
* remove nls dependency (remove getParseErrorMessage)
24-
*/
25-
function getParseErrorMessage(errorCode: Json.ParseErrorCode): string {
26-
switch (errorCode) {
27-
case Json.ParseErrorCode.InvalidSymbol: return localize('error.invalidSymbol', 'Invalid symbol');
28-
case Json.ParseErrorCode.InvalidNumberFormat: return localize('error.invalidNumberFormat', 'Invalid number format');
29-
case Json.ParseErrorCode.PropertyNameExpected: return localize('error.propertyNameExpected', 'Property name expected');
30-
case Json.ParseErrorCode.ValueExpected: return localize('error.valueExpected', 'Value expected');
31-
case Json.ParseErrorCode.ColonExpected: return localize('error.colonExpected', 'Colon expected');
32-
case Json.ParseErrorCode.CommaExpected: return localize('error.commaExpected', 'Comma expected');
33-
case Json.ParseErrorCode.CloseBraceExpected: return localize('error.closeBraceExpected', 'Closing brace expected');
34-
case Json.ParseErrorCode.CloseBracketExpected: return localize('error.closeBracketExpected', 'Closing bracket expected');
35-
case Json.ParseErrorCode.EndOfFileExpected: return localize('error.endOfFileExpected', 'End of file expected');
36-
default: return '';
37-
}
18+
export function ParseSchema(schemaString: string): JSONSchema {
19+
return Json.parse(schemaString);
3820
}
3921

4022
export interface IJSONSchemaService {
@@ -384,17 +366,13 @@ export class JSONSchemaService implements IJSONSchemaService {
384366
}
385367

386368
return this.requestService(url).then(
387-
content => {
369+
(content: JSONSchema) => {
388370
if (!content) {
389371
let errorMessage = localize('json.schema.nocontent', 'Unable to load schema from \'{0}\': No content.', toDisplayString(url));
390372
return new UnresolvedSchema(<JSONSchema>{}, [errorMessage]);
391373
}
392374

393-
let schemaContent: JSONSchema = {};
394-
let jsonErrors = [];
395-
schemaContent = Json.parse(content, jsonErrors);
396-
let errors = jsonErrors.length ? [localize('json.schema.invalidFormat', 'Unable to parse content from \'{0}\': {1}.', toDisplayString(url), getParseErrorMessage(jsonErrors[0]))] : [];
397-
return new UnresolvedSchema(schemaContent, errors);
375+
return new UnresolvedSchema(content, []);
398376
},
399377
(error: any) => {
400378
let errorMessage = localize('json.schema.unabletoload', 'Unable to load schema from \'{0}\': {1}', toDisplayString(url), error.toString());

language-service/src/yamlLanguageService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export interface WorkspaceContextService {
7474
* in case of an error, a displayable error string
7575
*/
7676
export interface SchemaRequestService {
77-
(uri: string): Thenable<string>;
77+
(uri: string): Thenable<JSONSchema>;
7878
}
7979

8080
export interface SchemaConfiguration {

language-service/test/pipelinesTests/yamlcompletion.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import fs = require('fs');
22
import { YAMLCompletion } from '../../src/services/yamlCompletion';
33
import * as JSONSchemaService from '../../src/services/jsonSchemaService';
4+
import { JSONSchema } from '../../src/jsonSchema';
45
import * as URL from 'url';
56
import { TextDocument, Position, CompletionList } from 'vscode-languageserver-types';
67
import * as yamlparser from '../../src/parser/yamlParser'
@@ -96,8 +97,8 @@ const requestService = (path: string): Thenable<string> => {
9697
});
9798
};
9899

99-
const schemaResolver = (url: string): Promise<string> => {
100-
return Promise.resolve(url);
100+
const schemaResolver = (url: string): Promise<JSONSchema> => {
101+
return Promise.resolve(JSONSchemaService.ParseSchema(url));
101102
}
102103

103104

language-service/test/pipelinesTests/yamlvalidation.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import fs = require('fs');
22
import { YAMLValidation } from '../../src/services/yamlValidation';
33
import * as JSONSchemaService from '../../src/services/jsonSchemaService';
4+
import { JSONSchema } from '../../src/jsonSchema';
45
import * as URL from 'url';
56
import { TextDocument, Position, Diagnostic } from 'vscode-languageserver-types';
67
import * as yamlparser from '../../src/parser/yamlParser'
@@ -36,8 +37,8 @@ const requestService = (path: string): Thenable<string> => {
3637
});
3738
};
3839

39-
const schemaResolver = (url: string): Promise<string> => {
40-
return Promise.resolve(url);
40+
const schemaResolver = (url: string): Promise<JSONSchema> => {
41+
return Promise.resolve(JSONSchemaService.ParseSchema(url));
4142
}
4243

4344

language-service/test/schema.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,20 @@ const fixtureDocuments = {
1717
'http://schema.management.azure.com/schemas/2014-04-01/SuccessBricks.ClearDB.json': 'SuccessBricks.ClearDB.json',
1818
'http://schema.management.azure.com/schemas/2015-08-01/Microsoft.Compute.json': 'Microsoft.Compute.json'
1919
};
20-
const requestServiceMock = function (uri: string): Promise<string> {
20+
const requestServiceMock = function (uri: string): Promise<JsonSchema.JSONSchema> {
2121
if (uri.length && uri[uri.length - 1] === '#') {
2222
uri = uri.substr(0, uri.length - 1);
2323
}
2424
let fileName = fixtureDocuments[uri];
2525
if (fileName) {
26-
return new Promise<string>((c, e) => {
26+
return new Promise<JsonSchema.JSONSchema>((c, e) => {
2727
let fixturePath = path.join(__dirname, './fixtures', fileName);
2828
fs.readFile(fixturePath, 'UTF-8', (err, result) => {
29-
err ? e("Resource not found.") : c(result.toString());
29+
err ? e("Resource not found.") : c(SchemaService.ParseSchema(result.toString()));
3030
});
3131
});
3232
}
33-
return Promise.reject<string>("Resource not found.");
33+
return Promise.reject<JsonSchema.JSONSchema>("Resource not found.");
3434
};
3535

3636

0 commit comments

Comments
 (0)