@marko/language-server 0.11.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/LICENSE +1 -1
  2. package/bin.js +2 -0
  3. package/dist/index.js +741 -139
  4. package/dist/index.js.map +7 -1
  5. package/dist/index.mjs +819 -0
  6. package/dist/index.mjs.map +7 -0
  7. package/dist/utils/compiler.d.ts +5 -61
  8. package/dist/utils/completions/types/attributeModifier.d.ts +5 -5
  9. package/dist/utils/completions/types/attributeName.d.ts +5 -5
  10. package/dist/utils/completions/types/closeTag.d.ts +5 -5
  11. package/dist/utils/completions/types/openTag.d.ts +5 -5
  12. package/dist/utils/completions/types/openTagName.d.ts +5 -5
  13. package/dist/utils/completions/types/styleContent.d.ts +4 -4
  14. package/dist/utils/definitions/types/attributeName.d.ts +5 -5
  15. package/dist/utils/definitions/types/openTagName.d.ts +5 -5
  16. package/dist/utils/htmljs-parser.d.ts +2 -2
  17. package/dist/utils/utils.d.ts +2 -2
  18. package/package.json +30 -16
  19. package/dist/bin.js +0 -5
  20. package/dist/bin.js.map +0 -1
  21. package/dist/utils/compiler.js +0 -54
  22. package/dist/utils/compiler.js.map +0 -1
  23. package/dist/utils/completions/index.js +0 -10
  24. package/dist/utils/completions/index.js.map +0 -1
  25. package/dist/utils/completions/types/attributeModifier.js +0 -20
  26. package/dist/utils/completions/types/attributeModifier.js.map +0 -1
  27. package/dist/utils/completions/types/attributeName.js +0 -84
  28. package/dist/utils/completions/types/attributeName.js.map +0 -1
  29. package/dist/utils/completions/types/closeTag.js +0 -21
  30. package/dist/utils/completions/types/closeTag.js.map +0 -1
  31. package/dist/utils/completions/types/openTag.js +0 -21
  32. package/dist/utils/completions/types/openTag.js.map +0 -1
  33. package/dist/utils/completions/types/openTagName.js +0 -75
  34. package/dist/utils/completions/types/openTagName.js.map +0 -1
  35. package/dist/utils/completions/types/styleContent.js +0 -22
  36. package/dist/utils/completions/types/styleContent.js.map +0 -1
  37. package/dist/utils/definitions/index.js +0 -6
  38. package/dist/utils/definitions/index.js.map +0 -1
  39. package/dist/utils/definitions/types/attributeName.js +0 -31
  40. package/dist/utils/definitions/types/attributeName.js.map +0 -1
  41. package/dist/utils/definitions/types/openTagName.js +0 -38
  42. package/dist/utils/definitions/types/openTagName.js.map +0 -1
  43. package/dist/utils/htmljs-parser.js +0 -179
  44. package/dist/utils/htmljs-parser.js.map +0 -1
  45. package/dist/utils/regexp-builder.js +0 -27
  46. package/dist/utils/regexp-builder.js.map +0 -1
  47. package/dist/utils/utils.js +0 -68
  48. package/dist/utils/utils.js.map +0 -1
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts", "../src/utils/compiler.ts", "../src/utils/htmljs-parser.ts", "../src/utils/completions/index.ts", "../src/utils/completions/types/attributeModifier.ts", "../src/utils/completions/types/attributeName.ts", "../src/utils/utils.ts", "../src/utils/completions/types/closeTag.ts", "../src/utils/completions/types/openTag.ts", "../src/utils/completions/types/openTagName.ts", "../src/utils/completions/types/styleContent.ts", "../src/utils/definitions/index.ts", "../src/utils/definitions/types/attributeName.ts", "../src/utils/regexp-builder.ts", "../src/utils/definitions/types/openTagName.ts"],
4
+ "sourcesContent": ["import {\n createConnection,\n ProposedFeatures,\n Range,\n Position,\n CompletionList,\n CompletionParams,\n Diagnostic,\n DiagnosticSeverity,\n DocumentFormattingParams,\n TextDocuments,\n TextEdit,\n TextDocumentSyncKind,\n} from \"vscode-languageserver/node\";\nimport { URI } from \"vscode-uri\";\nimport { TextDocument } from \"vscode-languageserver-textdocument\";\nimport * as prettier from \"prettier\";\nimport { inspect, isDeepStrictEqual } from \"util\";\nimport {\n getTagLibLookup,\n getCompilerAndTranslatorForDoc,\n Compiler,\n} from \"./utils/compiler\";\nimport { parseUntilOffset } from \"./utils/htmljs-parser\";\nimport * as completionTypes from \"./utils/completions\";\nimport * as definitionTypes from \"./utils/definitions\";\n\nif (\n typeof require !== \"undefined\" &&\n require.extensions &&\n !(\".ts\" in require.extensions)\n) {\n // Prevent compiler hooks written in typescript to explode the language server.\n require.extensions[\".ts\"] = undefined;\n}\n\nconst cacheForCompiler = new WeakMap<Compiler, Map<unknown, unknown>>();\nconst connection = createConnection(ProposedFeatures.all);\nconst prevDiagnostics = new WeakMap<TextDocument, Diagnostic[]>();\nconst diagnosticTimeouts = new WeakMap<\n TextDocument,\n ReturnType<typeof setTimeout>\n>();\nconst documents = new TextDocuments(TextDocument);\nconst markoErrorRegExp = /^(.+?)(?:\\((\\d+)(?:\\s*,\\s*(\\d+))?\\))?: (.*)$/gm;\n\nconsole.log = (...args: unknown[]) => {\n connection.console.log(args.map((v) => inspect(v)).join(\" \"));\n};\nconsole.error = (...args: unknown[]) => {\n connection.console.error(args.map((v) => inspect(v)).join(\" \"));\n};\nprocess.on(\"uncaughtException\", console.error);\nprocess.on(\"unhandledRejection\", console.error);\n\nconnection.onInitialize(() => {\n return {\n capabilities: {\n textDocumentSync: TextDocumentSyncKind.Incremental,\n documentFormattingProvider: true,\n definitionProvider: true,\n completionProvider: {\n triggerCharacters: [\".\", \":\", \"<\", \">\", \"@\", \"/\"],\n },\n },\n };\n});\n\nconnection.onInitialized(() => {\n documents.all().forEach((doc) => queueValidation(doc));\n});\n\nconnection.onCompletion((params: CompletionParams): CompletionList => {\n const doc = documents.get(params.textDocument.uri)!;\n const taglib = getTagLibLookup(doc);\n if (!taglib) return CompletionList.create([], true);\n\n const event = parseUntilOffset({\n taglib,\n offset: doc.offsetAt(params.position),\n text: doc.getText(),\n });\n\n const handler =\n event && completionTypes[event.type as keyof typeof completionTypes];\n return (\n (handler && handler(taglib, doc, params, event as any)) ||\n CompletionList.create([], true)\n );\n});\n\nconnection.onDefinition((params) => {\n const doc = documents.get(params.textDocument.uri)!;\n const taglib = getTagLibLookup(doc);\n if (!taglib) return;\n\n const event = parseUntilOffset({\n taglib,\n offset: doc.offsetAt(params.position),\n text: doc.getText(),\n });\n\n const handler =\n event && definitionTypes[event.type as keyof typeof definitionTypes];\n return handler && handler(taglib, doc, params, event as any);\n});\n\nconnection.onDocumentFormatting(\n async ({\n textDocument,\n options,\n }: DocumentFormattingParams): Promise<TextEdit[]> => {\n try {\n const doc = documents.get(textDocument.uri)!;\n const { fsPath, scheme } = URI.parse(textDocument.uri);\n const text = doc.getText();\n const formatted = prettier.format(text, {\n parser: \"marko\",\n filepath: fsPath,\n tabWidth: options.tabSize,\n useTabs: options.insertSpaces === false,\n ...(scheme === \"file\"\n ? await prettier\n .resolveConfig(fsPath, {\n editorconfig: true,\n })\n .catch(() => null)\n : null),\n });\n\n return [\n TextEdit.replace(\n Range.create(doc.positionAt(0), doc.positionAt(text.length)),\n formatted\n ),\n ];\n } catch (e) {\n displayMessage(\"Error\", inspect(e, { colors: false }));\n }\n\n return [\n TextEdit.replace(\n Range.create(Position.create(0, 0), Position.create(0, 0)),\n \"\"\n ),\n ];\n }\n);\n\nconnection.onDidChangeWatchedFiles(() => {\n const clearedCompilers = new Set<Compiler>();\n for (const doc of documents.all()) {\n const { compiler } = getCompilerAndTranslatorForDoc(doc);\n\n if (!clearedCompilers.has(compiler)) {\n clearCaches(compiler);\n clearedCompilers.add(compiler);\n }\n }\n});\n\ndocuments.onDidChangeContent((change) => {\n queueValidation(change.document);\n\n if (change.document.version > 1) {\n clearCaches(getCompilerAndTranslatorForDoc(change.document).compiler);\n }\n});\n\nfunction queueValidation(doc: TextDocument) {\n clearTimeout(diagnosticTimeouts.get(doc)!);\n diagnosticTimeouts.set(\n doc,\n setTimeout(() => {\n const prevDiag = prevDiagnostics.get(doc);\n const nextDiag = doValidate(doc);\n\n if (prevDiag && isDeepStrictEqual(prevDiag, nextDiag)) {\n return;\n }\n\n prevDiagnostics.set(doc, nextDiag);\n connection.sendDiagnostics({\n uri: doc.uri,\n diagnostics: nextDiag,\n });\n }, 800)\n );\n}\n\nfunction doValidate(doc: TextDocument): Diagnostic[] {\n const { fsPath, scheme } = URI.parse(doc.uri);\n\n if (scheme !== \"file\") {\n return [];\n }\n\n const { compiler, translator } = getCompilerAndTranslatorForDoc(doc);\n const diagnostics: Diagnostic[] = [];\n\n try {\n compiler.compileSync(doc.getText(), fsPath, {\n cache: getCacheForCompiler(compiler),\n output: \"source\",\n code: false,\n translator,\n });\n } catch (e) {\n let match: RegExpExecArray | null;\n while ((match = markoErrorRegExp.exec((e as Error).message))) {\n const [, fileName, rawLine, rawCol, msg] = match;\n const line = (parseInt(rawLine, 10) || 1) - 1;\n const col = (parseInt(rawCol, 10) || 1) - 1;\n diagnostics.push(\n Diagnostic.create(\n Range.create(line, col, line, col),\n msg,\n DiagnosticSeverity.Error,\n undefined,\n fileName\n )\n );\n }\n }\n\n return diagnostics;\n}\n\nfunction clearCaches(compiler: Compiler) {\n cacheForCompiler.get(compiler)?.clear();\n compiler.taglib.clearCaches();\n}\n\nfunction getCacheForCompiler(compiler: Compiler) {\n let cache = cacheForCompiler.get(compiler);\n if (!cache) {\n cacheForCompiler.set(compiler, (cache = new Map()));\n }\n return cache;\n}\n\nfunction displayMessage(\n type: \"Information\" | \"Warning\" | \"Error\",\n msg: string\n) {\n setImmediate(() => {\n connection.sendNotification(`show${type}`, msg);\n });\n}\n\ndocuments.listen(connection);\nconnection.listen();\n", "import path from \"path\";\nimport { URI } from \"vscode-uri\";\nimport resolveFrom from \"resolve-from\";\nimport lassoPackageRoot from \"lasso-package-root\";\nimport type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport type {\n AttributeDefinition,\n TagDefinition,\n TaglibLookup,\n} from \"@marko/babel-utils\";\n\nimport * as builtinCompiler from \"@marko/compiler\";\nimport * as builtinTranslator from \"@marko/translator-default\";\n\nexport type Compiler = typeof import(\"@marko/compiler\");\nexport { AttributeDefinition, TagDefinition, TaglibLookup };\nexport type CompilerAndTranslator = {\n compiler: Compiler;\n translator: any; // TODO should update the type in `@marko/compiler` to not just be string | undefined\n};\n\nconst compilerAndTranslatorForDoc = new WeakMap<\n TextDocument,\n CompilerAndTranslator\n>();\n\nexport function getCompilerAndTranslatorForDoc(\n doc: TextDocument\n): CompilerAndTranslator {\n let compilerAndTranslator = compilerAndTranslatorForDoc.get(doc);\n if (!compilerAndTranslator) {\n compilerAndTranslatorForDoc.set(\n doc,\n (compilerAndTranslator = loadCompiler(\n path.dirname(URI.parse(doc.uri).fsPath)\n ))\n );\n }\n\n return compilerAndTranslator;\n}\n\nexport function getTagLibLookup(\n document: TextDocument\n): TaglibLookup | undefined {\n try {\n const { compiler, translator } = getCompilerAndTranslatorForDoc(document);\n return compiler.taglib.buildLookup(\n URI.parse(document.uri).fsPath,\n translator\n );\n // eslint-disable-next-line no-empty\n } catch {}\n}\n\nfunction loadCompiler(dir: string): CompilerAndTranslator {\n const rootDir = lassoPackageRoot.getRootDir(dir);\n const pkgPath =\n rootDir && resolveFrom.silent(rootDir, \"@marko/compiler/package.json\");\n const pkg = pkgPath && require(pkgPath);\n\n if (pkg && /^5\\./.test(pkg.version)) {\n try {\n // Ensure translator is available in local package, or fallback to built in compiler.\n let translator = ([] as string[])\n .concat(\n Object.keys(pkg.dependencies),\n Object.keys(pkg.peerDependencies),\n Object.keys(pkg.devDependencies)\n )\n .find((name) => /^marko$|^(@\\/marko\\/|marko-)translator-/.test(name));\n\n if (translator === \"marko\" || !translator) {\n // Fallback to compiler default translator\n translator = require(resolveFrom(dir, \"@marko/compiler/config\"))\n .translator as string;\n }\n\n require(resolveFrom(dir, translator));\n return {\n compiler: require(resolveFrom(dir, \"@marko/compiler\")),\n translator,\n };\n // eslint-disable-next-line no-empty\n } catch {}\n }\n\n return {\n compiler: builtinCompiler,\n translator: builtinTranslator,\n };\n}\n", "import { createParser } from \"htmljs-parser\";\nimport type { TaglibLookup } from \"./compiler\";\n\nexport namespace ParserEvents {\n export interface Error {\n type: \"error\";\n code: string;\n message: string;\n pos: number;\n endPos: number;\n }\n\n export interface OpenTagName extends Tag {\n type: \"openTagName\";\n }\n\n export interface OpenTag extends Tag {\n type: \"openTag\";\n argument: { pos: number; endPos: number; value: string } | undefined;\n params: { pos: number; endPos: number; value: string } | undefined;\n shorthandClassNames:\n | {\n value: string;\n rawParts: { text: string; pos: number; endPos: number }[];\n }[]\n | undefined;\n attributes: Attribute[];\n nestedTags: { [x: string]: Tag } | undefined;\n openTagOnly: boolean;\n selfClosed: boolean;\n tagNameEndPos: number;\n isNestedTag: boolean;\n isRepeated: boolean;\n targetProperty: string | undefined;\n }\n\n export interface CloseTag {\n type: \"closeTag\";\n tagName: string;\n pos: number;\n endPos: number;\n }\n\n export interface Placeholder {\n type: \"placeholder\";\n escape: boolean;\n pos: number;\n endPos: number; // Added manually.\n value: string;\n withinTagName: string;\n withinOpenTag: string;\n withinAttribute: boolean;\n withinBody: boolean;\n withinString: boolean;\n }\n\n // Extended events\n export interface AttributeName {\n type: \"attributeName\";\n tag: OpenTag;\n name: string;\n pos: number;\n endPos: number;\n }\n\n export interface AttributeModifier {\n type: \"attributeModifier\";\n tag: OpenTag;\n name: string;\n modifier: string;\n pos: number;\n endPos: number;\n }\n\n export interface AttributeValue {\n type: \"attributeValue\";\n tag: OpenTag;\n name: string;\n value: string;\n pos: number;\n endPos: number;\n }\n\n export interface Text {\n type: \"text\";\n value: string;\n // Added manually.\n pos: number;\n endPos: number;\n parent: OpenTag | null;\n }\n\n export interface StyleContent {\n type: \"styleContent\";\n language: \"css\" | \"less\" | \"scss\";\n block: boolean;\n content: string;\n pos: number;\n endPos: number;\n }\n\n export type Any =\n | Error\n | OpenTagName\n | OpenTag\n | CloseTag\n | Placeholder\n | AttributeName\n | AttributeModifier\n | AttributeValue\n | Text\n | StyleContent;\n\n interface Tag {\n tagName: string;\n tagNameExpression: string | undefined;\n emptyTagName: boolean; // eg: <.class>\n concise: boolean;\n pos: number;\n endPos: number;\n // Added manually.\n parent: OpenTag | null;\n }\n\n interface Attribute {\n name: string;\n argument: { pos: number; endPos: number; value: string } | undefined;\n value: string | undefined;\n pos: number;\n endPos: number;\n }\n}\n\nconst SUPPORTED_STYLE_LANGS = {\n css: true,\n scss: true,\n less: true,\n};\n\nexport function parseUntilOffset(options: {\n offset: number;\n text: string;\n taglib: TaglibLookup;\n includeErrors?: boolean;\n}) {\n const { offset, text, taglib, includeErrors } = options;\n let result: ParserEvents.Any | null = null;\n let parentTag: ParserEvents.OpenTagName | ParserEvents.OpenTag | null = null;\n const parser = createParser(\n {\n onError: includeErrors && finish,\n onScriptlet: finish,\n onPlaceholder: finish,\n onOpenTagName(ev: ParserEvents.OpenTagName) {\n if (parentTag) {\n ev.parent = parentTag as ParserEvents.OpenTag;\n }\n\n // Currently the parser has the wrong end position here with tag params :\\\n if (!ev.concise) {\n ev.pos += 1;\n }\n\n ev.endPos = ev.pos + ev.tagName.length;\n parentTag = ev;\n finish(ev);\n },\n onOpenTag(ev: ParserEvents.OpenTag) {\n ev.parent = parentTag!.parent;\n parentTag = ev;\n\n if (ev.tagName === \"style\") {\n const firstAttr = ev.attributes[0];\n const isBlock = firstAttr && firstAttr.name.startsWith(\"{\");\n\n if (isBlock) {\n const content = firstAttr.name.slice(1, -1);\n const pos = text.indexOf(content, ev.tagNameEndPos);\n const endPos = pos + content.length;\n const requestedLanguage = (ev.shorthandClassNames &&\n ev.shorthandClassNames[0].rawParts[0] &&\n ev.shorthandClassNames[0].rawParts[0].text) as\n | void\n | keyof typeof SUPPORTED_STYLE_LANGS;\n const language =\n requestedLanguage && SUPPORTED_STYLE_LANGS[requestedLanguage]\n ? requestedLanguage\n : \"css\";\n\n finish({\n type: \"styleContent\",\n language,\n block: true,\n content: text.slice(pos, endPos),\n pos,\n endPos,\n });\n\n return;\n }\n }\n\n let attrEndPos = ev.tagNameEndPos;\n for (const attr of ev.attributes) {\n if (!attr.name) {\n // Legacy dynamic attrs.\n if (attr.value !== undefined) {\n attrEndPos += attr.value.length;\n }\n continue;\n }\n\n if (attr.name.slice(0, 3) === \"...\") {\n attrEndPos = attr.argument ? attr.argument.endPos + 1 : attr.endPos;\n continue;\n }\n\n const attrStartPos = text.indexOf(attr.name, attrEndPos);\n const match = /:(.*)$/.exec(attr.name);\n const modifier = match && match[1];\n let name = attr.name;\n\n if (modifier) {\n name = name.slice(0, name.length - modifier.length - 1);\n const modifierStartPos = attrStartPos + name.length;\n const modifierEndPos = modifierStartPos + modifier.length + 1;\n if (\n finish({\n type: \"attributeModifier\",\n tag: ev,\n name,\n modifier,\n pos: modifierStartPos,\n endPos: modifierEndPos,\n })\n ) {\n return;\n }\n }\n\n const attrNameEndPos = attrStartPos + name.length;\n\n if (\n finish({\n type: \"attributeName\",\n tag: ev,\n name,\n pos: attrStartPos,\n endPos: attrNameEndPos,\n })\n ) {\n return;\n }\n\n if (attr.value) {\n attrEndPos = attr.endPos;\n const valueStartPos = attr.pos + 1; // Add one to account for \"=\".\n if (\n finish({\n type: \"attributeValue\",\n tag: ev,\n name,\n value: text.slice(valueStartPos, attrEndPos), // We use the raw value to ignore things like non standard placeholders.\n pos: valueStartPos,\n endPos: attr.endPos,\n })\n ) {\n break;\n }\n } else {\n attrEndPos = attr.argument ? attr.argument.endPos + 1 : attr.endPos;\n }\n }\n\n finish(ev);\n },\n onText(ev: ParserEvents.Text) {\n ev.endPos = parser.pos as number;\n ev.pos = ev.endPos - ev.value.length;\n\n if (parentTag) {\n ev.parent = parentTag as ParserEvents.OpenTag;\n\n if (parentTag.tagName === \"style\") {\n finish({\n type: \"styleContent\",\n language: \"css\",\n block: false,\n content: ev.value,\n pos: ev.pos,\n endPos: ev.endPos,\n });\n\n return;\n }\n }\n\n finish(ev);\n },\n onCloseTag(ev: ParserEvents.CloseTag) {\n parentTag = parentTag && parentTag.parent;\n finish(ev);\n },\n },\n {\n isOpenTagOnly(ev: string) {\n const tagDef = taglib.getTag(ev);\n return tagDef && tagDef.openTagOnly;\n },\n }\n );\n\n try {\n // We only parse up to the end of the line the user is currently looking for.\n parser.parse(`${text}\\n`);\n } catch (err) {\n return includeErrors\n ? ({\n type: \"error\",\n code: \"UNEXPECTED_TOKEN\",\n message: (err as Error).message,\n pos: parser.pos,\n endPos: parser.pos,\n } as ParserEvents.Error)\n : null;\n }\n\n return result as ParserEvents.Any | null;\n\n function finish(event: ParserEvents.Any): boolean {\n const { type, pos, endPos } = event;\n if (\n !result &&\n (type === \"error\" ||\n (pos != null && pos <= offset && endPos != null && endPos >= offset))\n ) {\n result = event;\n parser.end();\n return true;\n }\n\n return false;\n }\n}\n", "export * from \"./types/attributeModifier\";\nexport * from \"./types/attributeName\";\nexport * from \"./types/closeTag\";\nexport * from \"./types/openTag\";\nexport * from \"./types/openTagName\";\nexport * from \"./types/styleContent\";\n", "import {\n type CompletionParams,\n CompletionList,\n CompletionItemKind,\n} from \"vscode-languageserver\";\nimport type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport type { ParserEvents } from \"../../htmljs-parser\";\nimport type { TaglibLookup } from \"../../compiler\";\n\nexport function attributeModifier(\n _taglib: TaglibLookup,\n _document: TextDocument,\n _params: CompletionParams,\n _event: ParserEvents.OpenTagName\n) {\n return CompletionList.create(\n [\n {\n label: \"scoped\",\n kind: CompletionItemKind.Keyword,\n detail: \"Use to prefix with a unique ID\",\n },\n {\n label: \"no-update\",\n kind: CompletionItemKind.Keyword,\n detail: \"Use to skip future updates to this attribute\",\n },\n ],\n true\n );\n}\n", "import {\n type CompletionParams,\n type CompletionItem,\n type MarkupContent,\n CompletionList,\n CompletionItemKind,\n MarkupKind,\n InsertTextFormat,\n TextEdit,\n} from \"vscode-languageserver\";\nimport type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport type { ParserEvents } from \"../../htmljs-parser\";\nimport type { TaglibLookup } from \"../../compiler\";\nimport { rangeFromEvent } from \"../../utils\";\n\nexport function attributeName(\n taglib: TaglibLookup,\n document: TextDocument,\n _params: CompletionParams,\n event: ParserEvents.AttributeName\n) {\n const completions: CompletionItem[] = [];\n const attrNameRange = rangeFromEvent(document, event);\n const tagDef =\n !event.tag.tagNameExpression && taglib.getTag(event.tag.tagName);\n const tagName = (tagDef && tagDef.name) || \"*\";\n const nestedTagAttrs: { [x: string]: boolean } = {};\n const neverAttrs: Set<string> = new Set();\n\n if (tagDef && tagDef.nestedTags) {\n for (const key in tagDef.nestedTags) {\n const nestedTagDef = tagDef.nestedTags[key];\n nestedTagAttrs[nestedTagDef.targetProperty] = true;\n }\n }\n\n taglib.forEachAttribute(tagName, (attr) => {\n if (attr.type === \"never\") {\n neverAttrs.add(attr.name);\n }\n });\n\n taglib.forEachAttribute(tagName, (attr, parent) => {\n if (\n attr.deprecated ||\n nestedTagAttrs[attr.name] ||\n attr.name === \"*\" ||\n neverAttrs.has(attr.name) ||\n (attr.name[0] === \"_\" &&\n /\\/node_modules\\//.test(attr.filePath || parent.filePath))\n ) {\n return;\n }\n\n const type = attr.type || (attr.html ? \"string\" : null);\n const documentation: MarkupContent = {\n kind: MarkupKind.Markdown,\n value: attr.description || \"\",\n };\n let label = attr.name;\n let snippet = attr.name;\n\n if (attr.enum) {\n snippet += `=\"\\${1|${attr.enum.join()}|}\"$0`;\n } else {\n switch (type) {\n case \"string\":\n snippet += '=\"$1\"$0';\n break;\n case \"function\":\n snippet += \"=($1)$0\";\n break;\n case \"statement\":\n case \"boolean\":\n case \"flag\":\n break;\n default:\n snippet += \"=\";\n break;\n }\n }\n\n const autocomplete =\n attr.autocomplete && Array.isArray(attr.autocomplete)\n ? attr.autocomplete[0]\n : attr.autocomplete;\n\n if (autocomplete) {\n label = autocomplete.displayText || label;\n snippet = autocomplete.snippet || snippet;\n\n if (autocomplete.descriptionMoreURL) {\n if (documentation.value) {\n documentation.value += `\\n\\n`;\n }\n\n documentation.value += `[More Info](${autocomplete.descriptionMoreURL})`;\n }\n }\n\n completions.push({\n label,\n documentation: documentation.value ? documentation : undefined,\n kind: CompletionItemKind.Property,\n insertTextFormat: InsertTextFormat.Snippet,\n textEdit: TextEdit.replace(attrNameRange, snippet),\n });\n });\n\n return CompletionList.create(completions, true);\n}\n", "import fs from \"fs\";\nimport { URI } from \"vscode-uri\";\nimport {\n type CompletionList,\n type InsertReplaceEdit,\n TextEdit,\n Position,\n Range,\n} from \"vscode-languageserver\";\nimport { TextDocument } from \"vscode-languageserver-textdocument\";\nimport type { ParserEvents } from \"./htmljs-parser\";\n\nexport const START_OF_FILE = Range.create(\n Position.create(0, 0),\n Position.create(0, 0)\n);\n\nexport function findNonControlFlowParent(tag: ParserEvents.OpenTagName) {\n let parent = tag.parent;\n\n while (parent) {\n if (!/^(?:else-)?if|else|for|while$/.test(parent.tagName)) {\n return parent;\n }\n\n parent = parent.parent;\n }\n\n return null;\n}\n\nexport function rangeFromEvent(\n document: TextDocument,\n event: ParserEvents.Any\n) {\n return Range.create(\n document.positionAt(event.pos),\n document.positionAt(event.endPos)\n );\n}\n\nexport function createTextDocument(filename: string): TextDocument {\n const uri = URI.file(filename).toString();\n const content = fs.readFileSync(filename, \"utf-8\");\n return TextDocument.create(uri, \"plaintext\", 0, content);\n}\n\nexport function shiftCompletionRanges(list: CompletionList, offset: Position) {\n list.items.forEach((item) => {\n if (item.additionalTextEdits) {\n item.additionalTextEdits.forEach((edit) =>\n shiftRange(edit.range, offset)\n );\n }\n\n if (item.textEdit) {\n shiftEdit(item.textEdit, offset);\n }\n });\n\n return list;\n}\n\nexport function shiftEdit(\n edit: TextEdit | InsertReplaceEdit,\n offset: Position\n) {\n if (TextEdit.is(edit)) {\n shiftRange(edit.range, offset);\n } else {\n shiftRange(edit.insert, offset);\n shiftRange(edit.replace, offset);\n }\n}\n\nexport function shiftRange(range: Range | undefined, offset: Position) {\n if (range) {\n shiftPosition(range.start, offset);\n shiftPosition(range.end, offset);\n }\n}\n\nexport function shiftPosition(pos: Position, offset: Position) {\n if (pos.line === 0) {\n pos.character += offset.character;\n }\n\n pos.line += offset.line;\n return pos;\n}\n", "import {\n type CompletionParams,\n CompletionList,\n CompletionItemKind,\n InsertTextFormat,\n TextEdit,\n} from \"vscode-languageserver\";\nimport type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport type { ParserEvents } from \"../../htmljs-parser\";\nimport type { TaglibLookup } from \"../../compiler\";\nimport { rangeFromEvent } from \"../../utils\";\n\nexport function closeTag(\n _taglib: TaglibLookup,\n document: TextDocument,\n _params: CompletionParams,\n event: ParserEvents.CloseTag\n) {\n if (event.tagName[0] === \"$\") {\n return;\n }\n\n const closingTagStr = `</${event.tagName}>`;\n\n return CompletionList.create(\n [\n {\n label: closingTagStr,\n kind: CompletionItemKind.Class,\n insertTextFormat: InsertTextFormat.Snippet,\n textEdit: TextEdit.replace(\n rangeFromEvent(document, event),\n closingTagStr\n ),\n },\n ],\n true\n );\n}\n", "import {\n type CompletionParams,\n CompletionList,\n CompletionItemKind,\n InsertTextFormat,\n} from \"vscode-languageserver\";\nimport type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport type { ParserEvents } from \"../../htmljs-parser\";\nimport type { TaglibLookup } from \"../../compiler\";\n\nexport function openTag(\n _taglib: TaglibLookup,\n _document: TextDocument,\n params: CompletionParams,\n event: ParserEvents.OpenTag\n) {\n const triggerCharacter = params.context && params.context.triggerCharacter;\n if (triggerCharacter !== \">\" || event.openTagOnly || event.selfClosed) {\n return;\n }\n\n const closingTagStr = `</${event.tagName[0] === \"$\" ? \"\" : event.tagName}>`;\n\n return CompletionList.create(\n [\n {\n label: closingTagStr,\n kind: CompletionItemKind.Class,\n insertTextFormat: InsertTextFormat.Snippet,\n insertText: `\\n\\t$0\\n${closingTagStr}`,\n },\n ],\n true\n );\n}\n", "import path from \"path\";\nimport { URI } from \"vscode-uri\";\nimport {\n type CompletionParams,\n CompletionItemKind,\n CompletionItem,\n CompletionList,\n InsertTextFormat,\n MarkupKind,\n TextEdit,\n} from \"vscode-languageserver\";\nimport type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport type { ParserEvents } from \"../../htmljs-parser\";\nimport type { TaglibLookup, TagDefinition } from \"../../compiler\";\nimport { rangeFromEvent, findNonControlFlowParent } from \"../../utils\";\n\nexport function openTagName(\n taglib: TaglibLookup,\n document: TextDocument,\n params: CompletionParams,\n event: ParserEvents.OpenTagName\n) {\n const { fsPath: currentTemplateFilePath } = URI.parse(document.uri);\n let tags: TagDefinition[];\n const triggerCharacter =\n (params.context && params.context.triggerCharacter) || event.tagName[0];\n const isAttributeTag = triggerCharacter === \"@\";\n const tagNameRange = rangeFromEvent(document, event);\n\n if (isAttributeTag) {\n const parentTag = findNonControlFlowParent(event);\n const parentTagDef =\n parentTag &&\n !parentTag.tagNameExpression &&\n taglib.getTag(parentTag.tagName);\n tags =\n (parentTagDef &&\n parentTagDef.nestedTags &&\n Object.values(parentTagDef.nestedTags)) ||\n [];\n } else {\n tags = taglib.getTagsSorted().filter((it) => !it.isNestedTag);\n }\n\n return CompletionList.create(\n tags\n .filter((it) => !it.deprecated)\n .filter((it) => it.name !== \"*\")\n .filter(\n (it) => /^[^_]/.test(it.name) || !/\\/node_modules\\//.test(it.filePath)\n )\n .map((it) => {\n let label = it.isNestedTag ? `@${it.name}` : it.name;\n const fileForTag = it.template || it.renderer || it.filePath;\n const fileURIForTag = URI.file(fileForTag).toString();\n const nodeModuleMatch = /\\/node_modules\\/((?:@[^/]+\\/)?[^/]+)/.exec(\n fileForTag\n );\n\n const nodeModuleName = nodeModuleMatch && nodeModuleMatch[1];\n const isCoreTag = nodeModuleName === \"marko\";\n\n const documentation = {\n kind: MarkupKind.Markdown,\n value: it.html\n ? `Built in [<${it.name}>](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/${it.name}) HTML tag.`\n : nodeModuleName\n ? isCoreTag\n ? `Core Marko [<${it.name}>](${fileURIForTag}) tag.`\n : `Custom Marko tag discovered from the [\"${nodeModuleName}\"](${fileURIForTag}) npm package.`\n : `Custom Marko tag discovered from:\\n\\n[${path.relative(\n currentTemplateFilePath,\n fileForTag\n )}](${fileURIForTag})`,\n };\n\n if (it.description) {\n documentation.value += `\\n\\n${it.description}`;\n }\n\n const autocomplete = it.autocomplete && it.autocomplete[0];\n\n if (autocomplete) {\n if (autocomplete.displayText) {\n label = autocomplete.displayText;\n }\n\n if (autocomplete.description) {\n documentation.value += `\\n\\n${autocomplete.description}`;\n }\n\n if (autocomplete.descriptionMoreURL) {\n documentation.value += `\\n\\n[More Info](${autocomplete.descriptionMoreURL})`;\n }\n }\n\n return {\n label,\n documentation,\n kind: CompletionItemKind.Class,\n insertTextFormat: InsertTextFormat.Snippet,\n textEdit: TextEdit.replace(\n tagNameRange,\n (autocomplete && autocomplete.snippet) || label\n ),\n } as CompletionItem;\n }),\n true\n );\n}\n", "import { type CompletionParams, Position } from \"vscode-languageserver\";\nimport { TextDocument } from \"vscode-languageserver-textdocument\";\nimport {\n getCSSLanguageService,\n getSCSSLanguageService,\n getLESSLanguageService,\n} from \"vscode-css-languageservice\";\n\nimport type { ParserEvents } from \"../../htmljs-parser\";\nimport type { TaglibLookup } from \"../../compiler\";\nimport { shiftCompletionRanges, shiftPosition } from \"../../utils\";\n\nconst services = {\n css: getCSSLanguageService,\n scss: getSCSSLanguageService,\n less: getLESSLanguageService,\n};\n\nexport function styleContent(\n _taglib: TaglibLookup,\n document: TextDocument,\n params: CompletionParams,\n event: ParserEvents.StyleContent\n) {\n const service = services[event.language]();\n const startPos = document.positionAt(event.pos);\n const relativePos = shiftPosition(\n params.position,\n Position.create(startPos.line * -1, startPos.character * -1)\n );\n const contentDocument = TextDocument.create(\n document.uri,\n event.language,\n document.version,\n event.content\n );\n\n const completions = service.doComplete(\n contentDocument,\n relativePos,\n service.parseStylesheet(contentDocument)\n );\n\n return shiftCompletionRanges(completions, startPos);\n}\n", "export * from \"./types/attributeName\";\nexport * from \"./types/openTagName\";\n", "import { URI } from \"vscode-uri\";\nimport {\n type TextDocumentPositionParams,\n Range,\n LocationLink,\n} from \"vscode-languageserver\";\nimport type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport type { TaglibLookup } from \"../../compiler\";\nimport type { ParserEvents } from \"../../htmljs-parser\";\nimport RegExpBuilder from \"../../regexp-builder\";\nimport { START_OF_FILE, createTextDocument, rangeFromEvent } from \"../../utils\";\n\nexport function attributeName(\n taglib: TaglibLookup,\n document: TextDocument,\n _params: TextDocumentPositionParams,\n event: ParserEvents.AttributeName\n) {\n const tagName = event.tag.tagNameExpression ? undefined : event.tag.tagName;\n const tagDef = tagName && taglib.getTag(tagName);\n const attrDef = taglib.getAttribute(tagName || \"*\", event.name);\n let range = START_OF_FILE;\n\n if (!attrDef) {\n return;\n }\n\n const attrEntryFile = attrDef.filePath || (tagDef && tagDef.filePath);\n\n if (!attrEntryFile) {\n return;\n }\n\n if (/\\/marko(?:-tag)?\\.json$/.test(attrEntryFile)) {\n const tagDefDoc = createTextDocument(attrEntryFile);\n const match = RegExpBuilder`/\"@${event.name}\"\\s*:\\s*[^\\r\\n,]+/g`.exec(\n tagDefDoc.getText()\n );\n\n if (match && match.index) {\n range = Range.create(\n tagDefDoc.positionAt(match.index),\n tagDefDoc.positionAt(match.index + match[0].length)\n );\n }\n }\n\n return [\n LocationLink.create(\n URI.file(attrEntryFile).toString(),\n range,\n range,\n rangeFromEvent(document, event)\n ),\n ];\n}\n", "export default function RegExpBuilder(\n strings: TemplateStringsArray,\n ...expressions: [unknown, ...unknown[]]\n) {\n let i = 0;\n let src = strings[0].slice(strings[0].indexOf(\"/\") + 1);\n const secondLastExprIndex = strings.length - 2;\n\n for (; i < secondLastExprIndex; i++) {\n src += escape(expressions[i]) + strings[i + 1];\n }\n\n src += escape(expressions[i]);\n\n const lastStr = strings[i + 1];\n const lastSlashIndex = lastStr.lastIndexOf(\"/\");\n let flags = \"\";\n\n if (lastSlashIndex === -1) {\n src += lastStr;\n } else {\n flags = lastStr.slice(lastSlashIndex + 1);\n src += lastStr.slice(0, lastSlashIndex);\n }\n\n return new RegExp(src, flags);\n}\n\nfunction escape(val: unknown) {\n return String(val).replace(/[-/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n}\n", "import { URI } from \"vscode-uri\";\nimport {\n type TextDocumentPositionParams,\n Range,\n LocationLink,\n} from \"vscode-languageserver\";\nimport type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport type { ParserEvents } from \"../../htmljs-parser\";\nimport type { TaglibLookup, TagDefinition } from \"../../compiler\";\nimport RegExpBuilder from \"../../regexp-builder\";\nimport {\n START_OF_FILE,\n findNonControlFlowParent,\n createTextDocument,\n rangeFromEvent,\n} from \"../../utils\";\n\nexport function openTagName(\n taglib: TaglibLookup,\n document: TextDocument,\n _params: TextDocumentPositionParams,\n event: ParserEvents.OpenTagName\n) {\n let tagDef: TagDefinition | null | undefined;\n let range = START_OF_FILE;\n const isAttributeTag = event.tagName[0] === \"@\";\n\n if (isAttributeTag) {\n const parentTag = findNonControlFlowParent(event);\n tagDef =\n parentTag &&\n (parentTag.tagNameExpression\n ? undefined\n : taglib.getTag(parentTag.tagName));\n } else {\n tagDef = taglib.getTag(event.tagName);\n }\n\n if (!tagDef) {\n return;\n }\n\n const tagEntryFile = tagDef.template || tagDef.renderer || tagDef.filePath;\n\n if (/\\/marko(?:-tag)?\\.json$/.test(tagEntryFile)) {\n const tagDefDoc = createTextDocument(tagEntryFile);\n const match = RegExpBuilder`/\"<${event.tagName}>\"\\s*:\\s*[^\\r\\n,]+/g`.exec(\n tagDefDoc.getText()\n );\n\n if (match && match.index) {\n range = Range.create(\n tagDefDoc.positionAt(match.index),\n tagDefDoc.positionAt(match.index + match[0].length)\n );\n }\n }\n\n return [\n LocationLink.create(\n URI.file(tagEntryFile).toString(),\n range,\n range,\n rangeFromEvent(document, event)\n ),\n ];\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,66 +1,10 @@
1
- import { TextDocument } from "vscode-languageserver-textdocument";
2
- export interface AttributeDefinition {
3
- allowExpressions: boolean;
4
- filePath: string;
5
- name: string;
6
- type?: string;
7
- html?: boolean;
8
- enum?: string[];
9
- pattern?: RegExp;
10
- required: boolean;
11
- defaultValue: unknown;
12
- description?: string;
13
- deprecated: boolean;
14
- autocomplete: {
15
- displayText: string;
16
- snippet: string;
17
- description: string;
18
- descriptionMoreURL?: string;
19
- }[];
20
- }
21
- export interface TagDefinition {
22
- dir: string;
23
- filePath: string;
24
- attributeGroups?: string[];
25
- patternAttributes?: AttributeDefinition[];
26
- attributes: {
27
- [x: string]: AttributeDefinition;
28
- };
29
- description?: string;
30
- nestedTags?: {
31
- [x: string]: TagDefinition & {
32
- isNestedTag: true;
33
- isRepeated: boolean;
34
- targetProperty: string;
35
- };
36
- };
37
- autocomplete?: {
38
- displayText: string;
39
- snippet: string;
40
- description: string;
41
- descriptionMoreURL?: string;
42
- }[];
43
- html: boolean;
44
- name: string;
45
- taglibId: string;
46
- template: string;
47
- renderer: string;
48
- deprecated: boolean;
49
- isNestedTag: true;
50
- isRepeated: boolean;
51
- openTagOnly: boolean;
52
- targetProperty: string;
53
- }
1
+ import type { TextDocument } from "vscode-languageserver-textdocument";
2
+ import type { AttributeDefinition, TagDefinition, TaglibLookup } from "@marko/babel-utils";
54
3
  export declare type Compiler = typeof import("@marko/compiler");
4
+ export { AttributeDefinition, TagDefinition, TaglibLookup };
55
5
  export declare type CompilerAndTranslator = {
56
6
  compiler: Compiler;
57
- translator: string;
7
+ translator: any;
58
8
  };
59
- export interface TagLibLookup {
60
- getTagsSorted(): TagDefinition[];
61
- getTag(tagName: string): TagDefinition;
62
- getAttribute(tagName: string, attrName: string): AttributeDefinition;
63
- forEachAttribute(tagName: string, callback: (attr: AttributeDefinition, tag: TagDefinition) => void): void;
64
- }
65
9
  export declare function getCompilerAndTranslatorForDoc(doc: TextDocument): CompilerAndTranslator;
66
- export declare function getTagLibLookup(document: TextDocument): TagLibLookup | undefined;
10
+ export declare function getTagLibLookup(document: TextDocument): TaglibLookup | undefined;
@@ -1,5 +1,5 @@
1
- import { CompletionParams, CompletionList } from "vscode-languageserver";
2
- import { TextDocument } from "vscode-languageserver-textdocument";
3
- import { ParserEvents } from "../../htmljs-parser";
4
- import { TagLibLookup } from "../../compiler";
5
- export declare function attributeModifier(taglib: TagLibLookup, document: TextDocument, params: CompletionParams, event: ParserEvents.OpenTagName): CompletionList;
1
+ import { type CompletionParams, CompletionList } from "vscode-languageserver";
2
+ import type { TextDocument } from "vscode-languageserver-textdocument";
3
+ import type { ParserEvents } from "../../htmljs-parser";
4
+ import type { TaglibLookup } from "../../compiler";
5
+ export declare function attributeModifier(_taglib: TaglibLookup, _document: TextDocument, _params: CompletionParams, _event: ParserEvents.OpenTagName): CompletionList;
@@ -1,5 +1,5 @@
1
- import { CompletionParams, CompletionList } from "vscode-languageserver";
2
- import { TextDocument } from "vscode-languageserver-textdocument";
3
- import { ParserEvents } from "../../htmljs-parser";
4
- import { TagLibLookup } from "../../compiler";
5
- export declare function attributeName(taglib: TagLibLookup, document: TextDocument, params: CompletionParams, event: ParserEvents.AttributeName): CompletionList;
1
+ import { type CompletionParams, CompletionList } from "vscode-languageserver";
2
+ import type { TextDocument } from "vscode-languageserver-textdocument";
3
+ import type { ParserEvents } from "../../htmljs-parser";
4
+ import type { TaglibLookup } from "../../compiler";
5
+ export declare function attributeName(taglib: TaglibLookup, document: TextDocument, _params: CompletionParams, event: ParserEvents.AttributeName): CompletionList;
@@ -1,5 +1,5 @@
1
- import { CompletionParams, CompletionList } from "vscode-languageserver";
2
- import { TextDocument } from "vscode-languageserver-textdocument";
3
- import { ParserEvents } from "../../htmljs-parser";
4
- import { TagLibLookup } from "../../compiler";
5
- export declare function closeTag(taglib: TagLibLookup, document: TextDocument, params: CompletionParams, event: ParserEvents.CloseTag): CompletionList | undefined;
1
+ import { type CompletionParams, CompletionList } from "vscode-languageserver";
2
+ import type { TextDocument } from "vscode-languageserver-textdocument";
3
+ import type { ParserEvents } from "../../htmljs-parser";
4
+ import type { TaglibLookup } from "../../compiler";
5
+ export declare function closeTag(_taglib: TaglibLookup, document: TextDocument, _params: CompletionParams, event: ParserEvents.CloseTag): CompletionList | undefined;
@@ -1,5 +1,5 @@
1
- import { CompletionParams, CompletionList } from "vscode-languageserver";
2
- import { TextDocument } from "vscode-languageserver-textdocument";
3
- import { ParserEvents } from "../../htmljs-parser";
4
- import { TagLibLookup } from "../../compiler";
5
- export declare function openTag(taglib: TagLibLookup, document: TextDocument, params: CompletionParams, event: ParserEvents.OpenTag): CompletionList | undefined;
1
+ import { type CompletionParams, CompletionList } from "vscode-languageserver";
2
+ import type { TextDocument } from "vscode-languageserver-textdocument";
3
+ import type { ParserEvents } from "../../htmljs-parser";
4
+ import type { TaglibLookup } from "../../compiler";
5
+ export declare function openTag(_taglib: TaglibLookup, _document: TextDocument, params: CompletionParams, event: ParserEvents.OpenTag): CompletionList | undefined;
@@ -1,5 +1,5 @@
1
- import { CompletionParams, CompletionList } from "vscode-languageserver";
2
- import { TextDocument } from "vscode-languageserver-textdocument";
3
- import { ParserEvents } from "../../htmljs-parser";
4
- import { TagLibLookup } from "../../compiler";
5
- export declare function openTagName(taglib: TagLibLookup, document: TextDocument, params: CompletionParams, event: ParserEvents.OpenTagName): CompletionList;
1
+ import { type CompletionParams, CompletionList } from "vscode-languageserver";
2
+ import type { TextDocument } from "vscode-languageserver-textdocument";
3
+ import type { ParserEvents } from "../../htmljs-parser";
4
+ import type { TaglibLookup } from "../../compiler";
5
+ export declare function openTagName(taglib: TaglibLookup, document: TextDocument, params: CompletionParams, event: ParserEvents.OpenTagName): CompletionList;
@@ -1,5 +1,5 @@
1
- import { CompletionParams } from "vscode-languageserver";
1
+ import { type CompletionParams } from "vscode-languageserver";
2
2
  import { TextDocument } from "vscode-languageserver-textdocument";
3
- import { ParserEvents } from "../../htmljs-parser";
4
- import { TagLibLookup } from "../../compiler";
5
- export declare function styleContent(taglib: TagLibLookup, document: TextDocument, params: CompletionParams, event: ParserEvents.StyleContent): import("vscode-languageserver-types").CompletionList;
3
+ import type { ParserEvents } from "../../htmljs-parser";
4
+ import type { TaglibLookup } from "../../compiler";
5
+ export declare function styleContent(_taglib: TaglibLookup, document: TextDocument, params: CompletionParams, event: ParserEvents.StyleContent): import("vscode-languageserver").CompletionList;
@@ -1,5 +1,5 @@
1
- import { LocationLink, TextDocumentPositionParams } from "vscode-languageserver";
2
- import { TextDocument } from "vscode-languageserver-textdocument";
3
- import { TagLibLookup } from "../../compiler";
4
- import { ParserEvents } from "../../htmljs-parser";
5
- export declare function attributeName(taglib: TagLibLookup, document: TextDocument, params: TextDocumentPositionParams, event: ParserEvents.AttributeName): LocationLink | undefined;
1
+ import { type TextDocumentPositionParams, LocationLink } from "vscode-languageserver";
2
+ import type { TextDocument } from "vscode-languageserver-textdocument";
3
+ import type { TaglibLookup } from "../../compiler";
4
+ import type { ParserEvents } from "../../htmljs-parser";
5
+ export declare function attributeName(taglib: TaglibLookup, document: TextDocument, _params: TextDocumentPositionParams, event: ParserEvents.AttributeName): LocationLink[] | undefined;
@@ -1,5 +1,5 @@
1
- import { LocationLink, TextDocumentPositionParams } from "vscode-languageserver";
2
- import { TextDocument } from "vscode-languageserver-textdocument";
3
- import { ParserEvents } from "../../htmljs-parser";
4
- import { TagLibLookup } from "../../compiler";
5
- export declare function openTagName(taglib: TagLibLookup, document: TextDocument, params: TextDocumentPositionParams, event: ParserEvents.OpenTagName): LocationLink | undefined;
1
+ import { type TextDocumentPositionParams, LocationLink } from "vscode-languageserver";
2
+ import type { TextDocument } from "vscode-languageserver-textdocument";
3
+ import type { ParserEvents } from "../../htmljs-parser";
4
+ import type { TaglibLookup } from "../../compiler";
5
+ export declare function openTagName(taglib: TaglibLookup, document: TextDocument, _params: TextDocumentPositionParams, event: ParserEvents.OpenTagName): LocationLink[] | undefined;
@@ -1,4 +1,4 @@
1
- import { TagLibLookup } from "./compiler";
1
+ import type { TaglibLookup } from "./compiler";
2
2
  export declare namespace ParserEvents {
3
3
  export interface Error {
4
4
  type: "error";
@@ -123,6 +123,6 @@ export declare namespace ParserEvents {
123
123
  export declare function parseUntilOffset(options: {
124
124
  offset: number;
125
125
  text: string;
126
- taglib: TagLibLookup;
126
+ taglib: TaglibLookup;
127
127
  includeErrors?: boolean;
128
128
  }): ParserEvents.Any | null;
@@ -1,6 +1,6 @@
1
- import { CompletionList, TextEdit, Position, Range, InsertReplaceEdit } from "vscode-languageserver";
1
+ import { type CompletionList, type InsertReplaceEdit, TextEdit, Position, Range } from "vscode-languageserver";
2
2
  import { TextDocument } from "vscode-languageserver-textdocument";
3
- import { ParserEvents } from "./htmljs-parser";
3
+ import type { ParserEvents } from "./htmljs-parser";
4
4
  export declare const START_OF_FILE: Range;
5
5
  export declare function findNonControlFlowParent(tag: ParserEvents.OpenTagName): ParserEvents.OpenTag | null;
6
6
  export declare function rangeFromEvent(document: TextDocument, event: ParserEvents.Any): Range;
package/package.json CHANGED
@@ -1,28 +1,39 @@
1
1
  {
2
2
  "name": "@marko/language-server",
3
3
  "description": "Marko Language Server",
4
- "version": "0.11.0",
5
- "author": "Diego Berrocal",
6
- "bugs": "https://github.com/marko-js/language-server/issues/new?template=Bug_report.md",
4
+ "version": "0.12.0",
7
5
  "bin": {
8
- "marko-language-server": "./dist/bin.js"
6
+ "marko-language-server": "./bin.js"
9
7
  },
8
+ "bugs": "https://github.com/marko-js/language-server/issues/new?template=Bug_report.md",
10
9
  "dependencies": {
11
- "@marko/compiler": "^5.16.1",
12
- "@marko/translator-default": "^5.16.1",
10
+ "@marko/babel-utils": "^5.20.3",
11
+ "@marko/compiler": "^5.20.3",
12
+ "@marko/translator-default": "^5.20.3",
13
+ "htmljs-parser": "^2.11.2",
13
14
  "lasso-package-root": "^1.0.1",
14
- "marko": "^5.16.1",
15
- "prettier": "^2.4.1",
16
- "prettier-plugin-marko": "^1.1.2",
15
+ "marko": "^5.20.3",
16
+ "prettier": "^2.6.0",
17
+ "prettier-plugin-marko": "^1.1.3",
17
18
  "resolve-from": "^5.0.0",
18
- "tslib": "^2.2.0",
19
- "vscode-css-languageservice": "^5.1.7",
19
+ "vscode-css-languageservice": "^5.3.0",
20
20
  "vscode-languageserver": "^7.0.0",
21
- "vscode-languageserver-textdocument": "^1.0.2",
22
- "vscode-uri": "^3.0.2"
21
+ "vscode-languageserver-textdocument": "^1.0.4",
22
+ "vscode-uri": "^3.0.3"
23
+ },
24
+ "devDependencies": {
25
+ "@types/prettier": "^2.4.4"
26
+ },
27
+ "exports": {
28
+ ".": {
29
+ "import": "./dist/index.mjs",
30
+ "default": "./dist/index.js"
31
+ }
23
32
  },
24
33
  "files": [
25
- "dist"
34
+ "dist",
35
+ "!**/__tests__",
36
+ "!**/*.tsbuildinfo"
26
37
  ],
27
38
  "homepage": "https://github.com/marko-js/language-server/tree/master/server/README.md",
28
39
  "keywords": [
@@ -34,9 +45,12 @@
34
45
  ],
35
46
  "license": "MIT",
36
47
  "main": "./dist/index.js",
48
+ "module": "./dist/index.mjs",
37
49
  "repository": {
38
50
  "type": "git",
39
51
  "url": "https://github.com/marko-js/language-server/tree/master/server"
40
52
  },
41
- "gitHead": "05b82b9c449a13862267dba8988331d917f8a314"
42
- }
53
+ "scripts": {
54
+ "build": "tsc -b && node -r esbuild-register build"
55
+ }
56
+ }
package/dist/bin.js DELETED
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- require(".");
5
- //# sourceMappingURL=bin.js.map
package/dist/bin.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";;;AACA,aAAW"}
@@ -1,54 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getTagLibLookup = exports.getCompilerAndTranslatorForDoc = void 0;
4
- const tslib_1 = require("tslib");
5
- const path_1 = (0, tslib_1.__importDefault)(require("path"));
6
- const vscode_uri_1 = require("vscode-uri");
7
- const resolve_from_1 = (0, tslib_1.__importDefault)(require("resolve-from"));
8
- const lasso_package_root_1 = (0, tslib_1.__importDefault)(require("lasso-package-root"));
9
- const compilerAndTranslatorForDoc = new WeakMap();
10
- function getCompilerAndTranslatorForDoc(doc) {
11
- let compilerAndTranslator = compilerAndTranslatorForDoc.get(doc);
12
- if (!compilerAndTranslator) {
13
- compilerAndTranslatorForDoc.set(doc, (compilerAndTranslator = loadCompiler(path_1.default.dirname(vscode_uri_1.URI.parse(doc.uri).fsPath))));
14
- }
15
- return compilerAndTranslator;
16
- }
17
- exports.getCompilerAndTranslatorForDoc = getCompilerAndTranslatorForDoc;
18
- function getTagLibLookup(document) {
19
- try {
20
- const { compiler, translator } = getCompilerAndTranslatorForDoc(document);
21
- return compiler.taglib.buildLookup(vscode_uri_1.URI.parse(document.uri).fsPath, translator);
22
- }
23
- catch (_a) { }
24
- }
25
- exports.getTagLibLookup = getTagLibLookup;
26
- function loadCompiler(dir) {
27
- const rootDir = lasso_package_root_1.default.getRootDir(dir);
28
- const pkgPath = rootDir && resolve_from_1.default.silent(rootDir, "@marko/compiler/package.json");
29
- const pkg = pkgPath && require(pkgPath);
30
- if (pkg && /^5\./.test(pkg.version)) {
31
- try {
32
- // Ensure translator is available in local package, or fallback to built in compiler.
33
- let translator = []
34
- .concat(Object.keys(pkg.dependencies), Object.keys(pkg.peerDependencies), Object.keys(pkg.devDependencies))
35
- .find((name) => /^marko$|^(@\/marko\/|marko-)translator-/.test(name));
36
- if (translator === "marko" || !translator) {
37
- // Fallback to compiler default translator
38
- translator = require((0, resolve_from_1.default)(dir, "@marko/compiler/config"))
39
- .translator;
40
- }
41
- require((0, resolve_from_1.default)(dir, translator));
42
- return {
43
- compiler: require((0, resolve_from_1.default)(dir, "@marko/compiler")),
44
- translator,
45
- };
46
- }
47
- catch (_a) { }
48
- }
49
- return {
50
- compiler: require("@marko/compiler"),
51
- translator: "@marko/translator-default",
52
- };
53
- }
54
- //# sourceMappingURL=compiler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/utils/compiler.ts"],"names":[],"mappings":";;;;AAAA,6DAAwB;AACxB,2CAAiC;AACjC,6EAAuC;AACvC,yFAAkD;AAmElD,MAAM,2BAA2B,GAAG,IAAI,OAAO,EAG5C,CAAC;AAEJ,SAAgB,8BAA8B,CAC5C,GAAiB;IAEjB,IAAI,qBAAqB,GAAG,2BAA2B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjE,IAAI,CAAC,qBAAqB,EAAE;QAC1B,2BAA2B,CAAC,GAAG,CAC7B,GAAG,EACH,CAAC,qBAAqB,GAAG,YAAY,CACnC,cAAI,CAAC,OAAO,CAAC,gBAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CACxC,CAAC,CACH,CAAC;KACH;IAED,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAdD,wEAcC;AAED,SAAgB,eAAe,CAC7B,QAAsB;IAEtB,IAAI;QACF,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,8BAA8B,CAAC,QAAQ,CAAC,CAAC;QAC1E,OAAO,QAAQ,CAAC,MAAM,CAAC,WAAW,CAChC,gBAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAC9B,UAAU,CACX,CAAC;KACH;IAAC,WAAM,GAAE;AACZ,CAAC;AAVD,0CAUC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,OAAO,GAAG,4BAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,OAAO,GACX,OAAO,IAAI,sBAAW,CAAC,MAAM,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC;IACzE,MAAM,GAAG,GAAG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAExC,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;QACnC,IAAI;YACF,qFAAqF;YACrF,IAAI,UAAU,GAAI,EAAe;iBAC9B,MAAM,CACL,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EACjC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CACjC;iBACA,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,yCAAyC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAExE,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE;gBACzC,0CAA0C;gBAC1C,UAAU,GAAG,OAAO,CAAC,IAAA,sBAAW,EAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;qBAC7D,UAAoB,CAAC;aACzB;YAED,OAAO,CAAC,IAAA,sBAAW,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;YACtC,OAAO;gBACL,QAAQ,EAAE,OAAO,CAAC,IAAA,sBAAW,EAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;gBACtD,UAAU;aACX,CAAC;SACH;QAAC,WAAM,GAAE;KACX;IAED,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC;QACpC,UAAU,EAAE,2BAA2B;KACxC,CAAC;AACJ,CAAC"}
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- (0, tslib_1.__exportStar)(require("./types/attributeModifier"), exports);
5
- (0, tslib_1.__exportStar)(require("./types/attributeName"), exports);
6
- (0, tslib_1.__exportStar)(require("./types/closeTag"), exports);
7
- (0, tslib_1.__exportStar)(require("./types/openTag"), exports);
8
- (0, tslib_1.__exportStar)(require("./types/openTagName"), exports);
9
- (0, tslib_1.__exportStar)(require("./types/styleContent"), exports);
10
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/completions/index.ts"],"names":[],"mappings":";;;AAAA,yEAA0C;AAC1C,qEAAsC;AACtC,gEAAiC;AACjC,+DAAgC;AAChC,mEAAoC;AACpC,oEAAqC"}
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.attributeModifier = void 0;
4
- const vscode_languageserver_1 = require("vscode-languageserver");
5
- function attributeModifier(taglib, document, params, event) {
6
- return vscode_languageserver_1.CompletionList.create([
7
- {
8
- label: "scoped",
9
- kind: vscode_languageserver_1.CompletionItemKind.Keyword,
10
- detail: "Use to prefix with a unique ID",
11
- },
12
- {
13
- label: "no-update",
14
- kind: vscode_languageserver_1.CompletionItemKind.Keyword,
15
- detail: "Use to skip future updates to this attribute",
16
- },
17
- ], true);
18
- }
19
- exports.attributeModifier = attributeModifier;
20
- //# sourceMappingURL=attributeModifier.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"attributeModifier.js","sourceRoot":"","sources":["../../../../src/utils/completions/types/attributeModifier.ts"],"names":[],"mappings":";;;AAAA,iEAI+B;AAK/B,SAAgB,iBAAiB,CAC/B,MAAoB,EACpB,QAAsB,EACtB,MAAwB,EACxB,KAA+B;IAE/B,OAAO,sCAAc,CAAC,MAAM,CAC1B;QACE;YACE,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,0CAAkB,CAAC,OAAO;YAChC,MAAM,EAAE,gCAAgC;SACzC;QACD;YACE,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,0CAAkB,CAAC,OAAO;YAChC,MAAM,EAAE,8CAA8C;SACvD;KACF,EACD,IAAI,CACL,CAAC;AACJ,CAAC;AArBD,8CAqBC"}
@@ -1,84 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.attributeName = void 0;
4
- const vscode_languageserver_1 = require("vscode-languageserver");
5
- const utils_1 = require("../../utils");
6
- function attributeName(taglib, document, params, event) {
7
- const completions = [];
8
- const attrNameRange = (0, utils_1.rangeFromEvent)(document, event);
9
- const tagDef = !event.tag.tagNameExpression && taglib.getTag(event.tag.tagName);
10
- const tagName = (tagDef && tagDef.name) || "*";
11
- const nestedTagAttrs = {};
12
- const neverAttrs = new Set();
13
- if (tagDef && tagDef.nestedTags) {
14
- for (const key in tagDef.nestedTags) {
15
- const nestedTagDef = tagDef.nestedTags[key];
16
- nestedTagAttrs[nestedTagDef.targetProperty] = true;
17
- }
18
- }
19
- taglib.forEachAttribute(tagName, (attr) => {
20
- if (attr.type === "never") {
21
- neverAttrs.add(attr.name);
22
- }
23
- });
24
- taglib.forEachAttribute(tagName, (attr, parent) => {
25
- if (attr.deprecated ||
26
- nestedTagAttrs[attr.name] ||
27
- attr.name === "*" ||
28
- neverAttrs.has(attr.name) ||
29
- (attr.name[0] === "_" &&
30
- /\/node_modules\//.test(attr.filePath || parent.filePath))) {
31
- return;
32
- }
33
- const type = attr.type || (attr.html ? "string" : null);
34
- const documentation = {
35
- kind: vscode_languageserver_1.MarkupKind.Markdown,
36
- value: attr.description || "",
37
- };
38
- let label = attr.name;
39
- let snippet = attr.name;
40
- if (attr.enum) {
41
- snippet += `="\${1|${attr.enum.join()}|}"$0`;
42
- }
43
- else {
44
- switch (type) {
45
- case "string":
46
- snippet += '="$1"$0';
47
- break;
48
- case "function":
49
- snippet += "=($1)$0";
50
- break;
51
- case "statement":
52
- case "boolean":
53
- case "flag":
54
- break;
55
- default:
56
- snippet += "=";
57
- break;
58
- }
59
- }
60
- const autocomplete = attr.autocomplete && Array.isArray(attr.autocomplete)
61
- ? attr.autocomplete[0]
62
- : attr.autocomplete;
63
- if (autocomplete) {
64
- label = autocomplete.displayText || label;
65
- snippet = autocomplete.snippet || snippet;
66
- if (autocomplete.descriptionMoreURL) {
67
- if (documentation.value) {
68
- documentation.value += `\n\n`;
69
- }
70
- documentation.value += `[More Info](${autocomplete.descriptionMoreURL})`;
71
- }
72
- }
73
- completions.push({
74
- label,
75
- documentation: documentation.value ? documentation : undefined,
76
- kind: vscode_languageserver_1.CompletionItemKind.Property,
77
- insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
78
- textEdit: vscode_languageserver_1.TextEdit.replace(attrNameRange, snippet),
79
- });
80
- });
81
- return vscode_languageserver_1.CompletionList.create(completions, true);
82
- }
83
- exports.attributeName = attributeName;
84
- //# sourceMappingURL=attributeName.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"attributeName.js","sourceRoot":"","sources":["../../../../src/utils/completions/types/attributeName.ts"],"names":[],"mappings":"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"}