@nlighten/monaco-json-transform
Version:
JSON Transform language tokenizer (and syntax highlight), hover provider and more
56 lines • 2.12 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.registerJsonTransformDSTProvider = exports.jsonTransformDSTProvider = void 0;
const tokenizeLine_1 = __importDefault(require("./tokenizeLine"));
const LEGEND = {
tokenTypes: [
"variable",
"variable_deprecated",
"member",
"context",
"annotation",
"function",
"function_context",
"function_deprecated",
"comment",
"no_style",
],
tokenModifiers: ["declaration"],
};
exports.jsonTransformDSTProvider = {
getLegend: () => LEGEND,
provideDocumentSemanticTokens: function (model /*, lastResultId, token*/) {
const lines = model.getLinesContent();
const ts = { tokens: [] };
for (let i = 0; i < lines.length; i++) {
const line = lines[i];
(0, tokenizeLine_1.default)(line, i, ts);
}
ts.tokens.sort((a, b) => a.line - b.line || a.char - b.char);
const newData = [];
let prevLine = 0, prevChar = 0;
ts.tokens.forEach(t => {
const deltaLine = t.line - prevLine, // translate line to deltaLine
deltaStart = prevLine === t.line ? t.char - prevChar : t.char;
newData.push(deltaLine, deltaStart, t.length, t.type, t.modifier);
prevLine = t.line;
prevChar = t.char;
});
return {
data: new Uint32Array(newData), //ts.data),
resultId: undefined,
};
},
releaseDocumentSemanticTokens: ( /*resultId*/) => { },
};
/**
* Add syntax highlighting in JSON transformers (e.g `$.variable`, `$$date:...`, etc)
*/
const registerJsonTransformDSTProvider = (monaco) => {
monaco.languages.registerDocumentSemanticTokensProvider("json", exports.jsonTransformDSTProvider);
};
exports.registerJsonTransformDSTProvider = registerJsonTransformDSTProvider;
//# sourceMappingURL=jsonTransformVariablesTokensProvider.js.map