UNPKG

qingkuai-language-service

Version:

The language service for qingkuai

241 lines (230 loc) 7.23 kB
'use strict'; var compiler = require('qingkuai/compiler'); function escapeRegExp(text) { return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); } function generatePromiseAndResolver() { let resolver; const promise = new Promise((resolve) => { resolver = (value) => { resolve(value); promise.state = "fullfilled"; }; }); promise.state = "pending"; return [promise, resolver]; } function debounce(fn, delay, getId) { const timers = /* @__PURE__ */ new Map(); return function(...args) { const id = getId?.(...args); if (timers.has(id)) { clearTimeout(timers.get(id)); } timers.set( id, setTimeout(() => { fn.apply(this, args); timers.delete(id); }, delay) ); }; } function traverseObject(o, callback) { const keys = Object.keys(o); for (let i = 0; i < keys.length; i++) { callback(keys[i], o[keys[i]], i); } } function typedKeys(obj) { return Object.keys(obj); } var QingkuaiCommands = /* @__PURE__ */ ((QingkuaiCommands2) => { QingkuaiCommands2["TriggerSuggest"] = "editor.action.triggerSuggest"; return QingkuaiCommands2; })(QingkuaiCommands || {}); const COMPLETION_TRIGGER_CHARS = [ ["<", ">", "!", "@", "#", "&", "-", "=", "|", "/"], // scripts [".", "'", '"', "`", ":", ",", "_", " "], // styles ["["], // prettier-ignore // emmet needs trigger characters [".", "+", "*", "]", "^", "$", ")", "}", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] ].flat(); const SIGNATURE_RETRIGGER_CHARS = [")"]; const SIGNATURE_TRIGGER_CHARS = ["(", "<", ","]; const KEY_RELATED_EVENT_MODIFIERS = /* @__PURE__ */ new Set([ "enter", "tab", "del", "esc", "up", "down", "left", "right", "space", "shift" ]); const INVALID_COMPLETION_TEXT_LABELS = /* @__PURE__ */ new Set([ "EmptyObject", "QingkuaiComponent", "anyValue", "sign", "defineComponent", "confirmComponent", "getListPair", "getTypeDelayMarking", "getPromiseResolve", "validateString", "validateNumber", "validateBoolean", "validateHtmlBlockOptions", "validateReferenceGroup", "validateTargetDirectiveValue", "validateDomReceiver", "validateEventHandler" ]); const INVLALID_COMPLETION_PACKAGES = /* @__PURE__ */ new Set([ "qingkuai/internal", "qingkuai/language-service" ]); const GLOBAL_TYPE_IDS = /* @__PURE__ */ new Set(["Props", "Refs"]); const SCRIPT_EXTENSIONS = /* @__PURE__ */ new Set([".d.ts", ".ts", ".tsx", ".js", ".jsx", ".json"]); const RETRIGGER_SUGGEST_COMMAND = { title: "retrigger suggest", command: QingkuaiCommands.TriggerSuggest }; const LSU_AND_DOT = compiler.constants.LSC.UTIL + "."; const SOURCE_SPAN_MARK = /* @__PURE__ */ Symbol( "has been converted to source text span by qingkuai-language-service" ); const PROXIED_MARK = /* @__PURE__ */ Symbol("has been proxied by qingkuai-language-service"); function debugAssert(v) { if (!v) { debugger; } return !!v; } function isNull(v) { return v === null; } function isString(v) { return typeof v === "string"; } function isEmptyString(v) { return v === ""; } function isUndefined(v) { return v === void 0; } function isQingkuaiFileName(fileName) { return fileName.endsWith(".qk"); } function mdCodeBlockGen(lang, code) { return "```" + lang + "\n" + code + "\n```"; } function compressNumberArray(arr) { const compressed = []; for (let i = 1, count = 1; i <= arr.length; i++) { if (arr[i] === arr[i - 1]) { count++; } else { compressed.push([arr[i - 1], count]); count = 1; } } return compressed; } function recoverNumberArray(compressed) { const recovered = []; for (const [value, count] of compressed) { for (let i = 0; i < count; i++) { recovered.push(value); } } return recovered; } function recoverPositions(compressed) { const recovered = []; const recoveredFlags = recoverNumberArray(compressed.flags); for (let i = 0; i < compressed.lineCharacters.length; i++) { for (let j = 0; j < compressed.lineCharacters[i]; j++) { const index = recoveredFlags.length; recovered.push({ line: i + 1, column: j, index, flag: recoveredFlags[index] }); } } return recovered; } function isIndexesInvalid(...items) { return items.some((item) => { return !item || item === -1; }); } const nonWhitespaceRE = /[^\s]/; const qkExtInImportRE = /\.qk(['"]\s*)$/; const inEntityCharacterRE = /^[a-zA-Z\d]+;/; const completeEntityCharacterRE = /&[a-zA-Z\d]*$/; const jsValidIdentifierRE = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/; const emmetTagNameRE = /(?:^|\s|<)[a-zA-z][a-zA-Z\d\-_.:]*$/; const CompletionImportTextEditRE = /^\s*(?:(?:update|add) )?import .* from/; const badComponentAttrMessageRE = /^Object literal may only specify known properties, and .*? does not exist in type '(Props|Refs)'\.$/; const GlobalTypeIsNonObjectJs = (name) => { return [ 7001, `The global type "${name}" must satisfy the constraint of being an object type.`, "https://qingkuai.dev/misc/typescript.html#component-attribute-types" ]; }; const KeyframeWillNotBeScoped = () => { return [ 7002, "The @keyframes rule is not scoped. It is recommended to define it in an external stylesheet and import it from the application entry file." ]; }; exports.COMPLETION_TRIGGER_CHARS = COMPLETION_TRIGGER_CHARS; exports.CompletionImportTextEditRE = CompletionImportTextEditRE; exports.GLOBAL_TYPE_IDS = GLOBAL_TYPE_IDS; exports.GlobalTypeIsNonObjectJs = GlobalTypeIsNonObjectJs; exports.INVALID_COMPLETION_TEXT_LABELS = INVALID_COMPLETION_TEXT_LABELS; exports.INVLALID_COMPLETION_PACKAGES = INVLALID_COMPLETION_PACKAGES; exports.KEY_RELATED_EVENT_MODIFIERS = KEY_RELATED_EVENT_MODIFIERS; exports.KeyframeWillNotBeScoped = KeyframeWillNotBeScoped; exports.LSU_AND_DOT = LSU_AND_DOT; exports.PROXIED_MARK = PROXIED_MARK; exports.QingkuaiCommands = QingkuaiCommands; exports.RETRIGGER_SUGGEST_COMMAND = RETRIGGER_SUGGEST_COMMAND; exports.SCRIPT_EXTENSIONS = SCRIPT_EXTENSIONS; exports.SIGNATURE_RETRIGGER_CHARS = SIGNATURE_RETRIGGER_CHARS; exports.SIGNATURE_TRIGGER_CHARS = SIGNATURE_TRIGGER_CHARS; exports.SOURCE_SPAN_MARK = SOURCE_SPAN_MARK; exports.badComponentAttrMessageRE = badComponentAttrMessageRE; exports.completeEntityCharacterRE = completeEntityCharacterRE; exports.compressNumberArray = compressNumberArray; exports.debounce = debounce; exports.debugAssert = debugAssert; exports.emmetTagNameRE = emmetTagNameRE; exports.escapeRegExp = escapeRegExp; exports.generatePromiseAndResolver = generatePromiseAndResolver; exports.inEntityCharacterRE = inEntityCharacterRE; exports.isEmptyString = isEmptyString; exports.isIndexesInvalid = isIndexesInvalid; exports.isNull = isNull; exports.isQingkuaiFileName = isQingkuaiFileName; exports.isString = isString; exports.isUndefined = isUndefined; exports.jsValidIdentifierRE = jsValidIdentifierRE; exports.mdCodeBlockGen = mdCodeBlockGen; exports.nonWhitespaceRE = nonWhitespaceRE; exports.qkExtInImportRE = qkExtInImportRE; exports.recoverNumberArray = recoverNumberArray; exports.recoverPositions = recoverPositions; exports.traverseObject = traverseObject; exports.typedKeys = typedKeys; //# sourceMappingURL=shared.cjs.map