-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathhover.js
More file actions
77 lines (77 loc) · 3.39 KB
/
hover.js
File metadata and controls
77 lines (77 loc) · 3.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.setHoverInLanguageServer = exports.getCircleHoverLanguageService = exports.getYamlLanguageService = exports.doHover = void 0;
const path = require("path");
const vscode = require("vscode");
const fs_1 = require("fs");
const vscode_json_languageservice_1 = require("vscode-json-languageservice");
const yamlParser07_1 = require("yaml-language-server/out/server/src/languageservice/parser/yamlParser07");
const arrUtils_1 = require("yaml-language-server/out/server/src/languageservice/utils/arrUtils");
const utils_1 = require("./utils");
let lsHover = undefined;
async function doHover(context, document, position) {
if (!lsHover) {
lsHover = (0, exports.getYamlLanguageService)(context);
}
// @ts-ignore
let hover = await lsHover.doHover(document, position);
if (hover && Array.isArray(hover?.contents)) {
const markdownString = new vscode.MarkdownString(hover.contents.join('\n').replace(/\\/g, ''));
let range = undefined;
if (hover.range) {
range = new vscode.Range(new vscode.Position(hover.range.start.line, hover.range.start.character), new vscode.Position(hover.range.end.line, hover.range.end.character));
}
return new vscode.Hover(markdownString, range);
}
return hover;
}
exports.doHover = doHover;
const getYamlLanguageService = function (context) {
const publicSchemaLocation = (0, utils_1.isInDevMode)()
? context.asAbsolutePath(path.join('..', '..', 'publicschema.json'))
: context.asAbsolutePath(path.join('publicschema.json'));
const publicSchema = (0, fs_1.readFileSync)(publicSchemaLocation, 'utf8');
const parsedPublicSchema = JSON.parse(publicSchema);
const circleciHoverLanguageService = (0, exports.getCircleHoverLanguageService)(parsedPublicSchema);
return (0, exports.setHoverInLanguageServer)(circleciHoverLanguageService);
};
exports.getYamlLanguageService = getYamlLanguageService;
const getCircleHoverLanguageService = function (schema) {
const builtInParams = {};
const languageService = (0, vscode_json_languageservice_1.getLanguageService)({
...builtInParams,
});
languageService.configure({
validate: true,
allowComments: false,
schemas: [
{
uri: 'json',
fileMatch: ['*'],
schema: schema,
},
],
});
return languageService;
};
exports.getCircleHoverLanguageService = getCircleHoverLanguageService;
const setHoverInLanguageServer = function (circleciHoverLanguageService) {
const builtInParams = {};
const languageService = (0, vscode_json_languageservice_1.getLanguageService)({
...builtInParams,
});
languageService.doHover = function (document, position) {
const doc = (0, yamlParser07_1.parse)(document.getText());
const offset = document.offsetAt(position);
const currentDoc = (0, arrUtils_1.matchOffsetToDocument)(offset, doc);
if (!currentDoc) {
return Promise.resolve(null);
}
const currentDocIndex = doc.documents.indexOf(currentDoc);
currentDoc.currentDocIndex = currentDocIndex;
return circleciHoverLanguageService.doHover(document, position, currentDoc);
};
return languageService;
};
exports.setHoverInLanguageServer = setHoverInLanguageServer;
//# sourceMappingURL=hover.js.map