@marko/language-server 0.12.17 → 1.0.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 (38) hide show
  1. package/dist/index.js +2021 -1565
  2. package/dist/index.js.map +4 -4
  3. package/dist/index.mjs +2055 -1594
  4. package/dist/index.mjs.map +4 -4
  5. package/dist/service/marko/complete/AttrName.d.ts +2 -2
  6. package/dist/service/marko/complete/AttrValue.d.ts +2 -2
  7. package/dist/service/marko/complete/Import.d.ts +3 -0
  8. package/dist/service/marko/complete/OpenTagName.d.ts +2 -2
  9. package/dist/service/marko/complete/Tag.d.ts +2 -2
  10. package/dist/service/marko/complete/index.d.ts +5 -8
  11. package/dist/service/marko/definition/AttrName.d.ts +2 -2
  12. package/dist/service/marko/definition/OpenTagName.d.ts +2 -2
  13. package/dist/service/marko/definition/index.d.ts +5 -8
  14. package/dist/service/marko/hover/OpenTagName.d.ts +2 -2
  15. package/dist/service/marko/hover/index.d.ts +5 -8
  16. package/dist/service/marko/util/is-document-link-attr.d.ts +2 -3
  17. package/dist/service/script/index.d.ts +3 -0
  18. package/dist/service/types.d.ts +6 -4
  19. package/dist/ts-plugin/host.d.ts +5 -0
  20. package/dist/ts-plugin/index.d.ts +5 -0
  21. package/dist/utils/constants.d.ts +3 -0
  22. package/dist/utils/file.d.ts +21 -0
  23. package/dist/utils/get-component-filename.d.ts +2 -0
  24. package/dist/utils/get-runtime-types.d.ts +8 -0
  25. package/dist/utils/get-script-lang.d.ts +4 -0
  26. package/dist/utils/project.d.ts +11 -0
  27. package/dist/utils/text-documents.d.ts +10 -0
  28. package/dist/utils/workspace.d.ts +5 -0
  29. package/package.json +20 -16
  30. package/dist/service/marko/complete/Statement.d.ts +0 -3
  31. package/dist/service/stylesheet/extract.d.ts +0 -10
  32. package/dist/utils/compiler.d.ts +0 -21
  33. package/dist/utils/doc-file.d.ts +0 -3
  34. package/dist/utils/extractor.d.ts +0 -12
  35. package/dist/utils/get-node-at-offset.d.ts +0 -2
  36. package/dist/utils/parser.d.ts +0 -176
  37. package/dist/utils/utils.d.ts +0 -4
  38. /package/dist/service/{stylesheet → style}/index.d.ts +0 -0
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/index.ts", "../src/utils/compiler.ts", "../src/utils/doc-file.ts", "../src/utils/parser.ts", "../src/utils/get-node-at-offset.ts", "../src/utils/messages.ts", "../src/service/index.ts", "../src/service/marko/complete/index.ts", "../src/service/marko/complete/Tag.ts", "../src/service/marko/util/get-tag-name-completion.ts", "../src/service/marko/complete/OpenTagName.ts", "../src/service/marko/complete/AttrName.ts", "../src/service/marko/complete/AttrValue.ts", "../src/service/marko/util/is-document-link-attr.ts", "../src/utils/file-system.ts", "../src/utils/resolve-url.ts", "../src/service/marko/complete/Statement.ts", "../src/service/marko/validate.ts", "../src/utils/utils.ts", "../src/service/marko/hover/OpenTagName.ts", "../src/service/marko/hover/index.ts", "../src/service/marko/definition/OpenTagName.ts", "../src/utils/regexp-builder.ts", "../src/service/marko/definition/AttrName.ts", "../src/service/marko/definition/index.ts", "../src/service/marko/document-links.ts", "../src/service/marko/document-symbols.ts", "../src/service/marko/format.ts", "../src/service/marko/index.ts", "../src/service/stylesheet/index.ts", "../src/utils/extractor.ts", "../src/service/stylesheet/extract.ts"],
4
- "sourcesContent": ["import {\n createConnection,\n DefinitionLink,\n Diagnostic,\n ProposedFeatures,\n TextDocuments,\n TextDocumentSyncKind,\n} from \"vscode-languageserver/node\";\nimport { TextDocument } from \"vscode-languageserver-textdocument\";\nimport { inspect, isDeepStrictEqual } from \"util\";\nimport { clearCompilerCache } from \"./utils/compiler\";\nimport setupMessages from \"./utils/messages\";\nimport service from \"./service\";\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}\nconst documents = new TextDocuments(TextDocument);\nconst connection = createConnection(ProposedFeatures.all);\nconst prevDiags = new WeakMap<TextDocument, Diagnostic[]>();\nconst pendingDiags = new WeakSet<TextDocument>();\nlet diagnosticTimeout: ReturnType<typeof setTimeout> | undefined;\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(async (params) => {\n setupMessages(connection);\n await service.initialize(params);\n\n return {\n capabilities: {\n textDocumentSync: TextDocumentSyncKind.Incremental,\n documentFormattingProvider: true,\n definitionProvider: true,\n hoverProvider: true,\n renameProvider: true,\n codeActionProvider: true,\n referencesProvider: true,\n documentLinkProvider: { resolveProvider: false },\n colorProvider: true,\n documentHighlightProvider: true,\n documentSymbolProvider: true,\n completionProvider: {\n triggerCharacters: [\n \".\",\n \":\",\n \"<\",\n \">\",\n \"@\",\n \"/\",\n '\"',\n \"'\",\n \"`\",\n \" \",\n \"=\",\n \"*\",\n \"#\",\n \"$\",\n \"+\",\n \"^\",\n \"(\",\n \"[\",\n \"-\",\n ],\n },\n },\n };\n});\n\nconnection.onDidChangeConfiguration(validateDocs);\nconnection.onDidChangeWatchedFiles(validateDocs);\ndocuments.onDidChangeContent(({ document }) => {\n queueDiagnostic();\n pendingDiags.add(document);\n clearCompilerCache(document);\n});\n\nconnection.onCompletion(async (params, cancel) => {\n return (\n (await service.doComplete(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onDefinition(async (params, cancel) => {\n return (\n ((await service.findDefinition(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) as DefinitionLink[]) || null\n );\n});\n\nconnection.onReferences(async (params, cancel) => {\n return (\n (await service.findReferences(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onDocumentLinks(async (params, cancel) => {\n return (\n (await service.findDocumentLinks(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onDocumentSymbol(async (params, cancel) => {\n return (\n (await service.findDocumentSymbols(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onDocumentHighlight(async (params, cancel) => {\n return (\n (await service.findDocumentHighlights(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onDocumentColor(async (params, cancel) => {\n return (\n (await service.findDocumentColors(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onColorPresentation(async (params, cancel) => {\n return (\n (await service.getColorPresentations(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onHover(async (params, cancel) => {\n return (\n (await service.doHover(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onRenameRequest(async (params, cancel) => {\n return (\n (await service.doRename(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onCodeAction(async (params, cancel) => {\n return (\n (await service.doCodeActions(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onDocumentFormatting(async (params, cancel) => {\n return (\n (await service.format(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nfunction validateDocs() {\n queueDiagnostic();\n clearCompilerCache();\n for (const doc of documents.all()) {\n pendingDiags.add(doc);\n }\n}\n\nfunction queueDiagnostic() {\n clearTimeout(diagnosticTimeout);\n const id = (diagnosticTimeout = setTimeout(async () => {\n const results = await Promise.all(\n documents.all().map(async (doc) => {\n if (!pendingDiags.delete(doc)) return;\n const prevDiag = prevDiags.get(doc) || [];\n const nextDiag = (await service.doValidate(doc)) || [];\n if (isDeepStrictEqual(prevDiag, nextDiag)) return;\n return [doc, nextDiag] as const;\n })\n );\n\n // Check that it wasn't canceled.\n if (id === diagnosticTimeout) {\n for (const result of results) {\n if (result) {\n const [doc, diag] = result;\n prevDiags.set(doc, diag);\n connection.sendDiagnostics({\n uri: doc.uri,\n diagnostics: diag,\n });\n }\n }\n }\n }, 400));\n}\n\ndocuments.listen(connection);\nconnection.listen();\n", "import 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\";\nimport { getDocDir } from \"./doc-file\";\nimport * as parser from \"./parser\";\n\nconst lookupKey = Symbol(\"lookup\");\nconst compilerInfoByDir = new Map<string, CompilerInfo>();\nconst builtinInfo: CompilerInfo = {\n cache: new Map(),\n lookup: builtinCompiler.taglib.buildLookup(__dirname, builtinTranslator),\n compiler: builtinCompiler,\n translator: builtinTranslator,\n};\nbuiltinCompiler.configure({ translator: builtinTranslator });\n\nexport type Compiler = typeof import(\"@marko/compiler\");\nexport { AttributeDefinition, TagDefinition, TaglibLookup };\nexport type CompilerInfo = {\n cache: Map<unknown, unknown>;\n lookup: TaglibLookup;\n compiler: Compiler;\n translator: builtinCompiler.Config[\"translator\"];\n};\n\nexport function parse(doc: TextDocument) {\n const compilerInfo = getCompilerInfo(doc);\n let parsed = compilerInfo.cache.get(doc) as\n | ReturnType<typeof parser.parse>\n | undefined;\n if (!parsed) {\n const source = doc.getText();\n compilerInfo.cache.set(doc, (parsed = parser.parse(source)));\n }\n\n return parsed;\n}\n\nexport function getCompilerInfo(doc: TextDocument): CompilerInfo {\n const dir = getDocDir(doc);\n if (!dir) return builtinInfo;\n\n let info = compilerInfoByDir.get(dir);\n if (!info) {\n info = loadCompilerInfo(dir);\n compilerInfoByDir.set(dir, info);\n }\n\n return info;\n}\n\nexport function clearCompilerCache(doc?: TextDocument) {\n if (doc) {\n getCompilerInfo(doc).cache.delete(doc);\n } else {\n for (const [, info] of compilerInfoByDir) {\n info.cache.clear();\n info.compiler.taglib.clearCaches();\n }\n }\n}\n\nfunction loadCompilerInfo(dir: string): CompilerInfo {\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 const cache = new Map();\n let translator = builtinTranslator;\n let compiler = builtinCompiler;\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 checkTranslator = ([] 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 (checkTranslator === \"marko\" || !checkTranslator) {\n // Fallback to compiler default translator\n checkTranslator = require(resolveFrom(dir, \"@marko/compiler/config\"))\n .translator as string;\n }\n\n [compiler, translator] = [\n require(resolveFrom(dir, \"@marko/compiler\")),\n require(resolveFrom(dir, checkTranslator)),\n ];\n // eslint-disable-next-line no-empty\n } catch {}\n }\n\n return {\n cache,\n get lookup() {\n let lookup: TaglibLookup = cache.get(lookupKey);\n if (lookup === undefined) {\n // Lazily build the lookup, and ensure it's re-created whenever the cache is cleared.\n try {\n lookup = compiler.taglib.buildLookup(dir, translator);\n } catch {\n lookup = builtinInfo.lookup;\n }\n\n cache.set(lookupKey, lookup);\n }\n\n return lookup;\n },\n compiler,\n translator,\n };\n}\n", "import type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport path from \"path\";\nimport { URI } from \"vscode-uri\";\n\nexport function getDocDir(doc: TextDocument): string | undefined {\n const filename = getDocFile(doc);\n return filename ? path.dirname(filename) : undefined;\n}\n\nexport function getDocFile(doc: TextDocument): string | undefined {\n return URI.parse(doc.uri).fsPath;\n}\n", "import { createParser, TagType, Range, Ranges } from \"htmljs-parser\";\nimport { getNodeAtOffset } from \"./get-node-at-offset\";\n\nexport { Range, Ranges };\n\nexport const UNFINISHED = Number.MAX_SAFE_INTEGER;\nexport enum NodeType {\n Program,\n Tag,\n OpenTagName,\n ShorthandId,\n ShorthandClassName,\n TagVar,\n TagArgs,\n TagParams,\n AttrNamed,\n AttrName,\n AttrArgs,\n AttrValue,\n AttrMethod,\n AttrSpread,\n AttrTag,\n Text,\n CDATA,\n Doctype,\n Declaration,\n Comment,\n Statement,\n Placeholder,\n Scriptlet,\n}\n\nexport namespace Node {\n export type AnyNode =\n | Program\n | Tag\n | OpenTagName\n | ShorthandId\n | ShorthandClassName\n | TagVar\n | TagArgs\n | TagParams\n | AttrNamed\n | AttrName\n | AttrArgs\n | AttrValue\n | AttrMethod\n | AttrSpread\n | AttrTag\n | Text\n | CDATA\n | Doctype\n | Declaration\n | Comment\n | Statement\n | Placeholder\n | Scriptlet;\n export type ParentNode = Program | Tag | AttrTag;\n export type StaticNode = Comment | Statement;\n export type ParentTag = Tag | AttrTag;\n export type AttrNode = AttrNamed | AttrSpread | AttrTag;\n export type ChildNode =\n | Tag\n | AttrTag\n | Text\n | Doctype\n | Declaration\n | CDATA\n | Comment\n | Placeholder\n | Scriptlet;\n\n export interface Program extends Range {\n type: NodeType.Program;\n parent: undefined;\n static: StaticNode[];\n body: ChildNode[];\n }\n\n export interface Tag extends Range {\n type: NodeType.Tag;\n parent: ParentNode;\n owner: undefined;\n concise: boolean;\n open: Range;\n close: Range | undefined;\n nameText: string | undefined;\n bodyType: Exclude<TagType, \"statement\">;\n name: OpenTagName;\n var: TagVar | undefined;\n args: TagArgs | undefined;\n params: TagParams | undefined;\n shorthandId: ShorthandId | undefined;\n shorthandClassNames: ShorthandClassName[] | undefined;\n attrs: AttrNode[] | undefined;\n selfClosed: boolean;\n body: undefined | ChildNode[];\n }\n\n export interface AttrTag extends Range {\n type: NodeType.AttrTag;\n parent: ParentTag;\n owner: ParentTag | undefined;\n concise: boolean;\n open: Range;\n close: Range | undefined;\n nameText: string | undefined;\n bodyType: TagType.html;\n name: OpenTagName;\n var: TagVar | undefined;\n args: TagArgs | undefined;\n params: TagParams | undefined;\n shorthandId: ShorthandId | undefined;\n shorthandClassNames: ShorthandClassName[] | undefined;\n attrs: AttrNode[] | undefined;\n selfClosed: boolean;\n body: undefined | ChildNode[];\n }\n\n export interface OpenTagName extends Ranges.Template {\n type: NodeType.OpenTagName;\n parent: ParentTag;\n }\n\n export interface ShorthandId extends Ranges.Template {\n type: NodeType.ShorthandId;\n parent: ParentTag;\n }\n\n export interface ShorthandClassName extends Ranges.Template {\n type: NodeType.ShorthandClassName;\n parent: ParentTag;\n }\n\n export interface TagVar extends Ranges.Value {\n type: NodeType.TagVar;\n parent: ParentTag;\n }\n\n export interface TagArgs extends Ranges.Value {\n type: NodeType.TagArgs;\n parent: ParentTag;\n }\n\n export interface TagParams extends Ranges.Value {\n type: NodeType.TagParams;\n parent: ParentTag;\n }\n\n export interface Statement extends Range {\n type: NodeType.Statement;\n parent: ParentNode;\n }\n\n export interface Text extends Range {\n type: NodeType.Text;\n parent: ParentNode;\n }\n\n export interface CDATA extends Ranges.Value {\n type: NodeType.CDATA;\n parent: ParentNode;\n }\n\n export interface Doctype extends Ranges.Value {\n type: NodeType.Doctype;\n parent: ParentNode;\n }\n\n export interface Declaration extends Ranges.Value {\n type: NodeType.Declaration;\n parent: ParentNode;\n }\n\n export interface Comment extends Ranges.Value {\n type: NodeType.Comment;\n parent: ParentNode;\n }\n\n export interface Placeholder extends Ranges.Value {\n type: NodeType.Placeholder;\n parent: ParentNode;\n escape: boolean;\n }\n\n export interface Scriptlet extends Ranges.Value {\n type: NodeType.Scriptlet;\n parent: ParentNode;\n block: boolean;\n }\n\n export interface AttrNamed extends Range {\n type: NodeType.AttrNamed;\n parent: ParentTag;\n name: AttrName;\n args: undefined | AttrArgs;\n value: undefined | AttrValue | AttrMethod;\n }\n\n export interface AttrName extends Range {\n type: NodeType.AttrName;\n parent: AttrNamed;\n }\n\n export interface AttrArgs extends Ranges.Value {\n type: NodeType.AttrArgs;\n parent: AttrNamed;\n }\n\n export interface AttrValue extends Range {\n type: NodeType.AttrValue;\n parent: AttrNamed;\n value: Range;\n bound: boolean;\n }\n\n export interface AttrMethod extends Range {\n type: NodeType.AttrMethod;\n parent: AttrNamed;\n params: Range;\n body: Range;\n }\n\n export interface AttrSpread extends Ranges.Value {\n type: NodeType.AttrSpread;\n parent: ParentTag;\n }\n}\n\nexport function parse(source: string) {\n const program: Node.Program = {\n type: NodeType.Program,\n parent: undefined,\n static: [],\n body: [],\n start: 0,\n end: source.length,\n };\n let curBodyType: TagType;\n let curOpenTagStart: Range | undefined;\n let curParent: Node.ParentNode | Node.Statement = program;\n let curAttr: Node.AttrNamed | undefined = undefined;\n let curBody: Exclude<Node.ParentNode[\"body\"], void> = program.body;\n\n const parser = createParser({\n onText(range) {\n // @ts-expect-error we know we are in a Tag or Program\n declare const curParent: Node.ParentNode;\n curBody.push({\n type: NodeType.Text,\n parent: curParent,\n start: range.start,\n end: range.end,\n });\n },\n onCDATA(range) {\n // @ts-expect-error we know we are in a Tag or Program\n declare const curParent: Node.ParentNode;\n curBody.push({\n type: NodeType.CDATA,\n parent: curParent,\n value: range.value,\n start: range.start,\n end: range.end,\n });\n },\n onDoctype(range) {\n // @ts-expect-error we know we are in a Tag or Program\n declare const curParent: Node.ParentNode;\n curBody.push({\n type: NodeType.Doctype,\n parent: curParent,\n value: range.value,\n start: range.start,\n end: range.end,\n });\n },\n onDeclaration(range) {\n // @ts-expect-error we know we are in a Tag or Program\n declare const curParent: Node.ParentNode;\n curBody.push({\n type: NodeType.Declaration,\n parent: curParent,\n value: range.value,\n start: range.start,\n end: range.end,\n });\n },\n onComment(range) {\n // @ts-expect-error we know we are in a Tag or Program\n declare const curParent: Node.ParentNode;\n curBody.push({\n type: NodeType.Comment,\n parent: curParent,\n value: range.value,\n start: range.start,\n end: range.end,\n });\n },\n onPlaceholder(range) {\n // @ts-expect-error we know we are in a Tag or Program\n declare const curParent: Node.ParentNode;\n curBody.push({\n type: NodeType.Placeholder,\n parent: curParent,\n value: range.value,\n escape: range.escape,\n start: range.start,\n end: range.end,\n });\n },\n onScriptlet(range) {\n // @ts-expect-error we know we are in a Tag or Program\n declare const curParent: Node.ParentNode;\n curBody.push({\n type: NodeType.Scriptlet,\n parent: curParent,\n value: range.value,\n block: range.block,\n start: range.start,\n end: range.end,\n });\n },\n onOpenTagStart(range) {\n curOpenTagStart = range;\n },\n onOpenTagName(range) {\n let concise = true;\n let start = range.start;\n let type = NodeType.Tag;\n let nameText: string | undefined = undefined;\n\n if (curOpenTagStart) {\n concise = false;\n start = curOpenTagStart.start;\n curOpenTagStart = undefined;\n }\n\n if (range.expressions.length) {\n curBodyType = TagType.html;\n } else {\n switch ((nameText = parser.read(range))) {\n case \"area\":\n case \"base\":\n case \"br\":\n case \"col\":\n case \"embed\":\n case \"hr\":\n case \"img\":\n case \"input\":\n case \"link\":\n case \"meta\":\n case \"param\":\n case \"source\":\n case \"track\":\n case \"wbr\":\n curBodyType = TagType.void;\n break;\n case \"html-comment\":\n case \"script\":\n case \"style\":\n case \"textarea\":\n curBodyType = TagType.text;\n break;\n case \"class\":\n case \"export\":\n case \"import\":\n case \"static\": {\n // Copy comments before statements into the static section.\n let i = program.body.length;\n for (; i--; ) {\n const prev = program.body[i];\n if (prev.type === NodeType.Comment) {\n program.static.push(prev);\n } else {\n break;\n }\n }\n\n program.body.length = i + 1; // Remove comments that were copied from above.\n program.static.push(\n (curParent = {\n type: NodeType.Statement,\n parent: program,\n start: range.start,\n end: UNFINISHED, // will be set later\n })\n );\n return (curBodyType = TagType.statement);\n }\n default:\n if (nameText[0] === \"@\") {\n type = NodeType.AttrTag;\n }\n curBodyType = TagType.html;\n break;\n }\n }\n\n const parent = curParent as Node.ParentNode;\n const end = UNFINISHED; // will be set later\n const name: Node.OpenTagName = {\n type: NodeType.OpenTagName,\n parent: undefined as unknown as Node.Tag,\n quasis: range.quasis,\n expressions: range.expressions,\n start: range.start,\n end: range.end,\n };\n const tag =\n (curParent =\n name.parent =\n {\n type,\n parent,\n owner: undefined,\n concise,\n open: { start, end },\n nameText,\n name,\n var: undefined,\n args: undefined,\n params: undefined,\n shorthandId: undefined,\n shorthandClassNames: undefined,\n attrs: undefined,\n selfClosed: false,\n bodyType: curBodyType,\n body: undefined,\n close: undefined,\n start,\n end,\n } as Node.ParentTag);\n\n if (tag.type === NodeType.AttrTag) {\n // We add attribute tags as a attribute of the closest non transparent tag.\n let owner = parent as Node.ParentTag;\n outer: do {\n switch (owner.type) {\n case NodeType.AttrTag:\n break;\n case NodeType.Tag:\n if (isTransparentTag(owner)) {\n owner = owner.parent as Node.ParentTag;\n continue outer;\n }\n break;\n default:\n break outer;\n }\n\n tag.owner = owner;\n // This name includes the full ancestry of the attribute tag and can be used in `TaglibLookup.getTag`.\n tag.nameText = resolveAttrTagName(tag);\n pushAttr(owner, tag);\n // eslint-disable-next-line no-constant-condition\n } while (false);\n }\n\n curBody.push(tag);\n curOpenTagStart = undefined;\n return curBodyType;\n },\n onTagShorthandId(range) {\n // @ts-expect-error we know we are in a Tag\n declare const curParent: Node.ParentTag;\n curParent.shorthandId = {\n type: NodeType.ShorthandId,\n parent: curParent,\n quasis: range.quasis,\n expressions: range.expressions,\n start: range.start,\n end: range.end,\n };\n },\n onTagShorthandClass(range) {\n // @ts-expect-error we know we are in a Tag\n declare const curParent: Node.ParentTag;\n const shorthandClassName: Node.ShorthandClassName = {\n type: NodeType.ShorthandClassName,\n parent: curParent,\n quasis: range.quasis,\n expressions: range.expressions,\n start: range.start,\n end: range.end,\n };\n\n if (curParent.shorthandClassNames) {\n curParent.shorthandClassNames.push(shorthandClassName);\n } else {\n curParent.shorthandClassNames = [shorthandClassName];\n }\n },\n onTagVar(range) {\n // @ts-expect-error we know we are in a Tag\n declare const curParent: Node.OpenTag;\n curParent.var = {\n type: NodeType.TagVar,\n parent: curParent,\n value: range.value,\n start: range.start,\n end: range.end,\n };\n },\n onTagParams(range) {\n // @ts-expect-error we know we are in a Tag\n declare const curParent: Node.OpenTag;\n curParent.params = {\n type: NodeType.TagParams,\n parent: curParent,\n value: range.value,\n start: range.start,\n end: range.end,\n };\n },\n onTagArgs(range) {\n // @ts-expect-error we know we are in a Tag\n declare const curParent: Node.OpenTag;\n curParent.args = {\n type: NodeType.TagArgs,\n parent: curParent,\n value: range.value,\n start: range.start,\n end: range.end,\n };\n },\n onAttrName(range) {\n const parent = curParent as Node.Tag;\n const name: Node.AttrName = {\n type: NodeType.AttrName,\n parent: undefined as unknown as Node.AttrNamed,\n start: range.start,\n end: range.end,\n };\n\n pushAttr(\n parent,\n (curAttr = name.parent =\n {\n type: NodeType.AttrNamed,\n parent,\n name,\n value: undefined,\n args: undefined,\n start: range.start,\n end: range.end,\n })\n );\n },\n onAttrArgs(range) {\n curAttr!.args = {\n type: NodeType.AttrArgs,\n parent: curAttr!,\n value: range.value,\n start: range.start,\n end: range.end,\n };\n },\n onAttrValue(range) {\n curAttr!.value = {\n type: NodeType.AttrValue,\n parent: curAttr!,\n value: range.value,\n bound: range.bound,\n start: range.start,\n end: range.end,\n };\n curAttr!.end = range.end;\n },\n onAttrMethod(range) {\n curAttr!.value = {\n type: NodeType.AttrMethod,\n parent: curAttr!,\n params: range.params,\n body: range.body,\n start: range.start,\n end: range.end,\n };\n curAttr!.end = range.end;\n },\n onAttrSpread(range) {\n // @ts-expect-error we know we are in a Tag\n declare const curParent: Node.ParentTag;\n pushAttr(curParent, {\n type: NodeType.AttrSpread,\n parent: curParent,\n value: range.value,\n start: range.start,\n end: range.end,\n });\n },\n onOpenTagEnd(range) {\n curAttr = undefined;\n\n if (curBodyType === TagType.statement) {\n curParent.end = range.end;\n curParent = curParent.parent as Node.ParentNode;\n } else {\n const tag = curParent as Node.ParentTag;\n tag.open.end = range.end;\n\n if (range.selfClosed || curBodyType === TagType.void) {\n curParent = tag.parent;\n tag.selfClosed = range.selfClosed;\n tag.end = range.end;\n } else {\n curBody = tag.body = [];\n }\n }\n },\n onCloseTagStart(range) {\n // @ts-expect-error we know we are in a Tag\n declare const curParent: Node.ParentTag;\n curParent.close = {\n start: range.start,\n end: Number.MAX_SAFE_INTEGER,\n };\n },\n onCloseTagEnd(range) {\n if (hasCloseTag(curParent)) curParent.close.end = range.end;\n curParent.end = range.end;\n curBody = (curParent = curParent.parent as Node.ParentNode).body!;\n },\n });\n\n parser.parse(source);\n return {\n read: parser.read,\n locationAt: parser.locationAt,\n positionAt: parser.positionAt,\n nodeAt: (offset: number) => getNodeAtOffset(offset, program),\n program,\n };\n}\n\nfunction pushAttr(parent: Node.ParentTag, node: Node.AttrNode) {\n if (parent.attrs) {\n parent.attrs.push(node);\n } else {\n parent.attrs = [node];\n }\n}\n\nfunction hasCloseTag(\n parent: Node.AnyNode\n): parent is Node.ParentTag & { close: Range } {\n return (parent as Node.ParentTag).close !== undefined;\n}\n\nfunction resolveAttrTagName(tag: Node.AttrTag) {\n let name = tag.nameText;\n let parentTag: Node.ParentTag | undefined = tag.owner!;\n do {\n switch (parentTag.type) {\n case NodeType.Tag:\n return parentTag.nameText ? `${parentTag.nameText}:${name}` : undefined;\n case NodeType.AttrTag:\n name = `${parentTag.nameText}:${name}`;\n parentTag = parentTag.owner;\n break;\n default:\n return;\n }\n } while (parentTag);\n}\n\n/**\n * Used to check if a node should be ignored as the parent of an attribute tag.\n * When control flow is the parent of an attribute tag, we add the attribute tag to\n * the closest non control flow ancestor attrs instead.\n */\nfunction isTransparentTag(node: Node.Tag): node is Node.Tag {\n return (\n node.nameText !== undefined &&\n /^(?:if|else(?:-if)?|for|while)$/.test(node.nameText)\n );\n}\n", "import { Node, NodeType } from \"./parser\";\n\nexport function getNodeAtOffset(\n offset: number,\n program: Node.Program\n): Node.AnyNode {\n const bodyNode = childAtOffset(offset, program.body);\n if (bodyNode) return visitChildNode(offset, bodyNode);\n return childAtOffset(offset, program.static) || program;\n}\n\nfunction visitChildNode(offset: number, child: Node.ChildNode): Node.AnyNode {\n switch (child.type) {\n case NodeType.Tag:\n case NodeType.AttrTag:\n return visitTag(offset, child);\n default:\n return child;\n }\n}\n\nfunction visitTag(offset: number, tag: Node.ParentTag): Node.AnyNode {\n const { body } = tag;\n if (body && offset > tag.open.end) {\n const childNode = childAtOffset(offset, body);\n return childNode ? visitChildNode(offset, childNode) : tag;\n }\n\n const { attrs } = tag;\n if (attrs && offset > attrs[0].start) {\n const attrNode = childAtOffset(offset, attrs);\n return attrNode ? visitAttrNode(offset, attrNode) : tag;\n }\n\n const { var: tagVar } = tag;\n if (tagVar && offset > tagVar.start && offset <= tagVar.end) {\n return tagVar;\n }\n\n const { args } = tag;\n if (args && offset > args.start && offset <= args.end) {\n return args;\n }\n\n const { params } = tag;\n if (params && offset > params.start && offset <= params.end) {\n return params;\n }\n\n const { name } = tag;\n if (name && offset <= name.end) {\n return name;\n }\n\n return tag;\n}\n\nfunction visitAttrNode(offset: number, attr: Node.AttrNode): Node.AnyNode {\n switch (attr.type) {\n case NodeType.AttrTag:\n return visitTag(offset, attr);\n case NodeType.AttrNamed: {\n const { value } = attr;\n if (value && offset > value.start) {\n return value;\n }\n\n const { name } = attr;\n if (offset > name.start && offset <= name.end) {\n return name;\n }\n\n break;\n }\n }\n\n return attr;\n}\n\nfunction childAtOffset<T extends Node.AnyNode[]>(\n offset: number,\n children: T\n): undefined | T[number] {\n let max = children.length - 1;\n if (max === -1) return undefined;\n\n let min = 0;\n while (min < max) {\n const mid = (1 + min + max) >>> 1;\n\n if (children[mid].start < offset) {\n min = mid;\n } else {\n max = mid - 1;\n }\n }\n\n const child = children[min];\n return offset > child.start && offset <= child.end ? child : undefined;\n}\n", "import { inspect } from \"util\";\nimport type { Connection } from \"vscode-languageserver\";\n\nlet connection!: Connection;\nexport default function setup(_: Connection) {\n connection = _;\n}\n\nexport function displayInformation(data: unknown) {\n display(\"showInformation\", data);\n}\n\nexport function displayWarning(data: unknown) {\n display(\"showWarning\", data);\n}\n\nexport function displayError(data: unknown) {\n display(\"showError\", data);\n}\n\nfunction display(type: string, data: unknown) {\n const msg =\n typeof data === \"string\" ? data : inspect(data, { colors: false });\n setImmediate(() => connection.sendNotification(type, msg));\n}\n", "import {\n CodeAction,\n ColorInformation,\n ColorPresentation,\n Command,\n CompletionItem,\n CompletionList,\n DefinitionLink,\n Diagnostic,\n DocumentHighlight,\n DocumentLink,\n Location,\n SymbolInformation,\n WorkspaceEdit,\n} from \"vscode-languageserver\";\nimport { displayError } from \"../utils/messages\";\nimport type { Plugin } from \"./types\";\n\nimport MarkoPlugin from \"./marko\";\nimport StyleSheetPlugin from \"./stylesheet\";\nconst plugins = [MarkoPlugin, StyleSheetPlugin];\n\n/**\n * Facade to all embedded plugins, eg css, typescript and our own.\n */\nconst service: Plugin = {\n async initialize(params) {\n await Promise.all(plugins.map((plugin) => plugin.initialize?.(params)));\n },\n async doComplete(doc, params, cancel) {\n let items: CompletionItem[] | undefined;\n let isIncomplete = false;\n // TODO: this should handle CompletionList.itemDefaults.\n // If there is a single responding plugin, pass through, otherwise need to apply the defaults to the completion items for the plugin.\n\n try {\n for (const pending of plugins.map((plugin) =>\n plugin.doComplete?.(doc, params, cancel)\n )) {\n const cur = await pending;\n if (cancel.isCancellationRequested) return;\n if (cur) {\n let curItems!: CompletionItem[];\n if (Array.isArray(cur)) {\n curItems = cur;\n } else {\n curItems = cur.items;\n isIncomplete ||= cur.isIncomplete;\n }\n\n items = items ? items.concat(curItems) : curItems;\n }\n }\n } catch (err) {\n isIncomplete = true;\n displayError(err);\n }\n\n if (items) {\n return CompletionList.create(items, isIncomplete);\n }\n },\n async findDefinition(doc, params, cancel) {\n let result: (Location | DefinitionLink)[] | undefined;\n\n try {\n for (const pending of plugins.map((plugin) =>\n plugin.findDefinition?.(doc, params, cancel)\n )) {\n const cur = await pending;\n if (cancel.isCancellationRequested) return;\n if (cur) result = (result || []).concat(cur);\n }\n } catch (err) {\n displayError(err);\n }\n\n return result;\n },\n async findReferences(doc, params, cancel) {\n let result: Location[] | undefined;\n\n try {\n for (const pending of plugins.map((plugin) =>\n plugin.findReferences?.(doc, params, cancel)\n )) {\n const cur = await pending;\n if (cancel.isCancellationRequested) return;\n if (cur) result = result ? result.concat(cur) : cur;\n }\n } catch (err) {\n displayError(err);\n }\n\n return result;\n },\n async findDocumentSymbols(doc, params, cancel) {\n let result: SymbolInformation[] | undefined;\n\n try {\n for (const pending of plugins.map((plugin) =>\n plugin.findDocumentSymbols?.(doc, params, cancel)\n )) {\n const cur = await pending;\n if (cancel.isCancellationRequested) return;\n if (cur) result = result ? result.concat(cur) : cur;\n }\n } catch (err) {\n displayError(err);\n }\n\n return result;\n },\n async findDocumentLinks(doc, params, cancel) {\n let result: DocumentLink[] | undefined;\n\n try {\n for (const pending of plugins.map((plugin) =>\n plugin.findDocumentLinks?.(doc, params, cancel)\n )) {\n const cur = await pending;\n if (cancel.isCancellationRequested) return;\n if (cur) result = result ? result.concat(cur) : cur;\n }\n } catch (err) {\n displayError(err);\n }\n\n return result;\n },\n async findDocumentHighlights(doc, params, cancel) {\n let result: DocumentHighlight[] | undefined;\n\n try {\n for (const pending of plugins.map((plugin) =>\n plugin.findDocumentHighlights?.(doc, params, cancel)\n )) {\n const cur = await pending;\n if (cancel.isCancellationRequested) return;\n if (cur) result = result ? result.concat(cur) : cur;\n }\n } catch (err) {\n displayError(err);\n }\n\n return result;\n },\n async findDocumentColors(doc, params, cancel) {\n let result: ColorInformation[] | undefined;\n\n try {\n for (const pending of plugins.map((plugin) =>\n plugin.findDocumentColors?.(doc, params, cancel)\n )) {\n const cur = await pending;\n if (cancel.isCancellationRequested) return;\n if (cur) result = result ? result.concat(cur) : cur;\n }\n } catch (err) {\n displayError(err);\n }\n\n return result;\n },\n async getColorPresentations(doc, params, cancel) {\n let result: ColorPresentation[] | undefined;\n\n try {\n for (const pending of plugins.map((plugin) =>\n plugin.getColorPresentations?.(doc, params, cancel)\n )) {\n const cur = await pending;\n if (cancel.isCancellationRequested) return;\n if (cur) result = result ? result.concat(cur) : cur;\n }\n } catch (err) {\n displayError(err);\n }\n\n return result;\n },\n async doHover(doc, params, cancel) {\n try {\n for (const plugin of plugins) {\n const result = await plugin.doHover?.(doc, params, cancel);\n if (cancel.isCancellationRequested) return;\n if (result) return result;\n }\n } catch (err) {\n displayError(err);\n }\n },\n async doRename(doc, params, cancel) {\n let changes: WorkspaceEdit[\"changes\"];\n let changeAnnotations: WorkspaceEdit[\"changeAnnotations\"];\n let documentChanges: WorkspaceEdit[\"documentChanges\"];\n\n try {\n for (const pending of plugins.map((plugin) =>\n plugin.doRename?.(doc, params, cancel)\n )) {\n const cur = await pending;\n if (cancel.isCancellationRequested) return;\n\n if (cur) {\n if (cur.changes) {\n if (changes) {\n changes = { ...changes };\n\n for (const uri in cur.changes) {\n changes[uri] = changes[uri]\n ? changes[uri].concat(cur.changes[uri])\n : cur.changes[uri];\n }\n } else {\n changes = cur.changes;\n }\n }\n\n if (cur.changeAnnotations) {\n changeAnnotations = changeAnnotations\n ? {\n ...changeAnnotations,\n ...cur.changeAnnotations,\n }\n : cur.changeAnnotations;\n }\n\n if (cur.documentChanges) {\n documentChanges = documentChanges\n ? documentChanges.concat(cur.documentChanges)\n : cur.documentChanges;\n }\n }\n }\n } catch (err) {\n displayError(err);\n }\n\n if (changes || changeAnnotations || documentChanges) {\n return {\n changes,\n changeAnnotations,\n documentChanges,\n };\n }\n },\n async doCodeActions(doc, params, cancel) {\n let result: (Command | CodeAction)[] | undefined;\n\n try {\n for (const pending of plugins.map((plugin) =>\n plugin.doCodeActions?.(doc, params, cancel)\n )) {\n const cur = await pending;\n if (cancel.isCancellationRequested) return;\n if (cur) result = result ? result.concat(cur) : cur;\n }\n } catch (err) {\n displayError(err);\n }\n\n return result;\n },\n async doValidate(doc) {\n let result: Diagnostic[] | undefined;\n try {\n for (const pending of plugins.map((plugin) => plugin.doValidate?.(doc))) {\n const cur = await pending;\n if (cur) result = result ? result.concat(cur) : cur;\n }\n } catch (err) {\n displayError(err);\n }\n\n return result;\n },\n format: MarkoPlugin.format,\n};\n\nexport { service as default };\n", "import type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport {\n CompletionItem,\n CompletionList,\n CompletionParams,\n} from \"vscode-languageserver\";\nimport { getCompilerInfo, parse } from \"../../../utils/compiler\";\n\nimport { Tag } from \"./Tag\";\nimport { OpenTagName } from \"./OpenTagName\";\nimport { AttrName } from \"./AttrName\";\nimport { AttrValue } from \"./AttrValue\";\nimport { Statement } from \"./Statement\";\nimport type { Plugin, Result } from \"../../types\";\nimport { NodeType } from \"../../../utils/parser\";\n\nexport type CompletionResult = Result<CompletionItem[]>;\nexport interface CompletionMeta<N = unknown>\n extends ReturnType<typeof getCompilerInfo> {\n document: TextDocument;\n params: CompletionParams;\n parsed: ReturnType<typeof parse>;\n offset: number;\n code: string;\n node: N;\n}\n\nconst handlers: Record<\n string,\n (data: CompletionMeta<any>) => CompletionResult\n> = {\n Tag,\n OpenTagName,\n AttrName,\n AttrValue,\n Statement,\n};\n\nexport const doComplete: Plugin[\"doComplete\"] = async (doc, params) => {\n const parsed = parse(doc);\n const offset = doc.offsetAt(params.position);\n const node = parsed.nodeAt(offset);\n return CompletionList.create(\n (await handlers[NodeType[node.type]]?.({\n document: doc,\n params,\n parsed,\n offset,\n node,\n code: doc.getText(),\n ...getCompilerInfo(doc),\n })) || [],\n true\n );\n};\n", "import {\n CompletionItemKind,\n InsertTextFormat,\n TextEdit,\n} from \"vscode-languageserver\";\nimport { type Node, UNFINISHED } from \"../../../utils/parser\";\nimport type { CompletionMeta, CompletionResult } from \".\";\n\nconst partialCloseTagReg = /<\\/(?:[^><]*>)?/iy;\n\n/**\n * Provide completion for the closing tag.\n */\nexport function Tag(event: CompletionMeta<Node.Tag>): CompletionResult {\n const { node } = event;\n const isClosed = node.end !== UNFINISHED;\n if (isClosed || node.concise) return;\n\n const { offset, parsed, code } = event;\n const closingTagStr = `</${node.nameText}>`;\n\n if (offset === node.open.end) {\n // We're at the end of the open tag and the closing tag was not found.\n return [\n {\n label: closingTagStr,\n kind: CompletionItemKind.Class,\n insertTextFormat: InsertTextFormat.Snippet,\n insertText: `\\n\\t$0\\n${closingTagStr}`,\n },\n ];\n } else if (node.close && offset >= node.close.start) {\n // We have an unfinished closing tag.\n const start = node.close.start;\n partialCloseTagReg.lastIndex = start;\n const [{ length }] = partialCloseTagReg.exec(code)!;\n const end = start + length;\n\n return [\n {\n label: closingTagStr,\n kind: CompletionItemKind.Class,\n insertTextFormat: InsertTextFormat.Snippet,\n textEdit: TextEdit.replace(\n parsed.locationAt({\n start,\n end,\n }),\n closingTagStr\n ),\n },\n ];\n }\n}\n", "import path from \"path\";\nimport type { TagDefinition } from \"@marko/babel-utils\";\nimport {\n type CompletionItem,\n type Range,\n CompletionItemKind,\n CompletionItemTag,\n InsertTextFormat,\n MarkupKind,\n TextEdit,\n} from \"vscode-languageserver\";\nimport { URI } from \"vscode-uri\";\n\nconst deprecated = [CompletionItemTag.Deprecated] as CompletionItemTag[];\n\nexport default function getTagNameCompletion({\n tag,\n range,\n showAutoComplete,\n importer,\n}: {\n tag: TagDefinition;\n range?: Range;\n importer?: string;\n showAutoComplete?: true;\n}): CompletionItem {\n let label = tag.isNestedTag ? `@${tag.name}` : tag.name;\n const fileForTag = tag.template || tag.renderer || tag.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 =\n /^@?marko[/-]/.test(tag.taglibId) || nodeModuleName === \"marko\";\n const documentation = {\n kind: MarkupKind.Markdown,\n value: tag.html\n ? `Built in [&lt;${tag.name}&gt;](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/${tag.name}) HTML tag.`\n : isCoreTag\n ? `Core Marko &lt;${tag.name}&gt; tag.`\n : nodeModuleName\n ? `Custom Marko tag discovered from the [\"${nodeModuleName}\"](${fileURIForTag}) npm package.`\n : `Custom Marko tag discovered from:\\n\\n[${\n importer ? path.relative(importer, fileForTag) : fileForTag\n }](${fileURIForTag})`,\n };\n\n if (tag.description) {\n documentation.value += `\\n\\n${tag.description}`;\n }\n\n const autocomplete = showAutoComplete ? tag.autocomplete?.[0] : undefined;\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 tags: tag.deprecated ? deprecated : undefined,\n insertTextFormat: autocomplete ? InsertTextFormat.Snippet : undefined,\n kind: tag.html ? CompletionItemKind.Property : CompletionItemKind.Class,\n textEdit: range && TextEdit.replace(range, autocomplete?.snippet || label),\n };\n}\n", "import { type Node, NodeType } from \"../../../utils/parser\";\nimport { getDocFile } from \"../../../utils/doc-file\";\nimport type { CompletionMeta, CompletionResult } from \".\";\nimport getTagNameCompletion from \"../util/get-tag-name-completion\";\nimport type { CompletionItem } from \"vscode-languageserver\";\n\nexport function OpenTagName({\n document,\n lookup,\n parsed,\n node,\n}: CompletionMeta<Node.OpenTagName>): CompletionResult {\n const importer = getDocFile(document);\n const tag = node.parent;\n const range = parsed.locationAt(node);\n const isAttrTag = tag.type === NodeType.AttrTag;\n const result: CompletionItem[] = [];\n\n if (isAttrTag) {\n let parentTag = tag.owner;\n while (parentTag?.type === NodeType.AttrTag) parentTag = parentTag.owner;\n const parentTagDef =\n parentTag && parentTag.nameText && lookup.getTag(parentTag.nameText);\n\n if (parentTagDef) {\n const { nestedTags } = parentTagDef;\n for (const key in nestedTags) {\n if (key !== \"*\") {\n const tag = nestedTags[key];\n result.push(\n getTagNameCompletion({\n tag,\n range,\n importer,\n showAutoComplete: true,\n })\n );\n }\n }\n }\n } else {\n const skipStatements = !(\n tag.concise && tag.parent.type === NodeType.Program\n );\n for (const tag of lookup.getTagsSorted()) {\n if (\n !(\n tag.name === \"*\" ||\n tag.isNestedTag ||\n (skipStatements && tag.parseOptions?.statement) ||\n (tag.name[0] === \"_\" &&\n /^@?marko[/-]|[\\\\/]node_modules[\\\\/]/.test(tag.filePath))\n )\n ) {\n result.push(\n getTagNameCompletion({\n tag,\n range,\n importer,\n showAutoComplete: true,\n })\n );\n }\n }\n }\n\n return result;\n}\n", "import {\n type CompletionItem,\n type MarkupContent,\n CompletionItemKind,\n MarkupKind,\n InsertTextFormat,\n TextEdit,\n} from \"vscode-languageserver\";\n\nimport type { Node } from \"../../../utils/parser\";\nimport type { CompletionMeta, CompletionResult } from \".\";\n\nexport function AttrName({\n offset,\n node,\n parsed,\n lookup,\n}: CompletionMeta<Node.AttrName>): CompletionResult {\n let name = parsed.read(node);\n if (name[0] === \"{\") return; // Ignore tag blocks.\n\n const modifierIndex = name.indexOf(\":\");\n const hasModifier = modifierIndex !== -1;\n\n if (hasModifier) {\n if (offset >= node.start + modifierIndex) {\n return [\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 } else {\n name = name.slice(0, modifierIndex);\n }\n }\n\n const completions: CompletionItem[] = [];\n const attrNameLoc = parsed.locationAt(\n hasModifier\n ? {\n start: node.start,\n end: node.start + name.length,\n }\n : node\n );\n\n const tagName = node.parent.parent.nameText || \"\";\n const tagDef = tagName && lookup.getTag(tagName);\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 lookup.forEachAttribute(tagName, (attr) => {\n if (attr.type === \"never\") {\n neverAttrs.add(attr.name);\n }\n });\n\n lookup.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(attrNameLoc, snippet),\n });\n });\n\n return completions;\n}\n", "import path from \"path\";\nimport {\n CompletionItem,\n CompletionItemKind,\n Range,\n TextEdit,\n} from \"vscode-languageserver\";\nimport type { Node } from \"../../../utils/parser\";\nimport isDocumentLinkAttr from \"../util/is-document-link-attr\";\nimport fileSystem, { FileType } from \"../../../utils/file-system\";\nimport resolveUrl from \"../../../utils/resolve-url\";\nimport type { CompletionMeta } from \".\";\n\nexport async function AttrValue({\n document,\n offset,\n node,\n parsed,\n code,\n}: CompletionMeta<Node.AttrValue>): Promise<void | CompletionItem[]> {\n const attr = node.parent;\n if (isDocumentLinkAttr(document, attr.parent, attr)) {\n const start = node.value.start + 1;\n if (code[start] !== \".\") return; // only resolve relative paths\n\n const end = node.value.end - 1;\n const relativeOffset = offset - start;\n const rawValue = parsed.read({\n start,\n end,\n });\n\n const segmentStart = rawValue.lastIndexOf(\"/\", relativeOffset);\n if (segmentStart === -1) return; // only resolve after a slash.\n\n const req = rawValue.slice(0, segmentStart);\n const uri = resolveUrl(req, document.uri);\n\n if (uri) {\n const result: CompletionItem[] = [];\n const curFile = req === \".\" ? path.basename(document.uri) : undefined;\n const replaceRange = Range.create(\n document.positionAt(start + segmentStart + 1),\n document.positionAt(start + rawValue.length)\n );\n\n for (const [entry, type] of await fileSystem.readDirectory(uri)) {\n if (entry[0] !== \".\" && entry !== curFile) {\n result.push(\n type === FileType.Directory\n ? {\n label: `${entry}/`,\n kind: CompletionItemKind.Folder,\n textEdit: TextEdit.replace(replaceRange, `${entry}/`),\n command: {\n title: \"Suggest\",\n command: \"editor.action.triggerSuggest\",\n },\n }\n : {\n label: entry,\n kind: CompletionItemKind.File,\n textEdit: TextEdit.replace(replaceRange, entry),\n }\n );\n }\n }\n\n return result;\n }\n }\n}\n", "import type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport { type Node, NodeType } from \"../../../utils/parser\";\n\nconst linkedAttrs: Map<string, Set<string>> = new Map([\n [\n \"src\",\n new Set([\n \"audio\",\n \"embed\",\n \"iframe\",\n \"img\",\n \"input\",\n \"script\",\n \"source\",\n \"track\",\n \"video\",\n ]),\n ],\n [\"href\", new Set([\"a\", \"area\", \"link\"])],\n [\"data\", new Set([\"object\"])],\n [\"poster\", new Set([\"video\"])],\n]);\n\nexport default function isDocumentLinkAttr(\n doc: TextDocument,\n tag: Node.ParentTag,\n attr: Node.AttrNode\n): attr is Node.AttrNamed & { value: Node.AttrValue } {\n return (\n (tag.nameText &&\n attr.type === NodeType.AttrNamed &&\n attr.value?.type === NodeType.AttrValue &&\n /^['\"]$/.test(doc.getText()[attr.value.value.start]) &&\n linkedAttrs\n .get(doc.getText().slice(attr.name.start, attr.name.end))\n ?.has(tag.nameText)) ||\n false\n );\n}\n", "import fs from \"fs/promises\";\nimport { type FileStat, FileType } from \"vscode-css-languageservice\";\nimport { fileURLToPath } from \"url\";\n\nexport { FileStat, FileType };\nexport default {\n stat,\n readDirectory,\n};\nasync function stat(uri: string): Promise<FileStat> {\n let type = FileType.Unknown;\n let ctime = -1;\n let mtime = -1;\n let size = -1;\n\n try {\n const stat = await fs.stat(fileURLToPath(uri));\n if (stat.isDirectory()) type = FileType.Directory;\n else if (stat.isFile()) type = FileType.File;\n ctime = stat.ctimeMs;\n mtime = stat.mtimeMs;\n size = stat.size;\n } catch {\n // ignore\n }\n\n return {\n type,\n ctime,\n mtime,\n size,\n };\n}\n\nasync function readDirectory(uri: string): Promise<[string, FileType][]> {\n try {\n const entries = await fs.readdir(fileURLToPath(uri));\n const base = uri.at(-1) === \"/\" ? uri : `${uri}/`;\n return (\n await Promise.all(\n entries.map(\n async (entry) =>\n [entry, (await stat(new URL(entry, base).toString())).type] as [\n string,\n FileType\n ]\n )\n )\n ).filter(([, type]) => type !== FileType.Unknown);\n } catch {\n return [];\n }\n}\n", "export default function resolveUrl(to: string, base: string) {\n try {\n const url = new URL(to, base);\n if (url.protocol === \"file:\") return url.toString();\n } catch {\n return undefined;\n }\n}\n", "import type { Node } from \"../../../utils/parser\";\nimport type { CompletionMeta, CompletionResult } from \".\";\nimport { CompletionItem, TextEdit } from \"vscode-languageserver\";\nimport getTagNameCompletion from \"../util/get-tag-name-completion\";\nimport { getDocFile } from \"../../../utils/doc-file\";\n\nconst importTagReg = /(['\"])<((?:[^\\1\\\\>]+|\\\\.)*)>?\\1/g;\n\nexport function Statement({\n code,\n node,\n parsed,\n lookup,\n document,\n}: CompletionMeta<Node.Statement>): CompletionResult {\n // check for import statement\n if (code[node.start] === \"i\") {\n importTagReg.lastIndex = 0;\n const value = parsed.read(node);\n const match = importTagReg.exec(value);\n if (match) {\n const importer = getDocFile(document);\n const [{ length }] = match;\n const range = parsed.locationAt({\n start: node.start + match.index + 1,\n end: node.start + match.index + length - 1,\n });\n\n const result: CompletionItem[] = [];\n\n for (const tag of lookup.getTagsSorted()) {\n if (\n (tag.template || tag.renderer) &&\n !(\n tag.html ||\n tag.parser ||\n tag.translator ||\n tag.isNestedTag ||\n tag.name === \"*\" ||\n tag.parseOptions?.statement ||\n /^@?marko[/-]/.test(tag.taglibId) ||\n (tag.name[0] === \"_\" && /[\\\\/]node_modules[\\\\/]/.test(tag.filePath))\n )\n ) {\n const completion = getTagNameCompletion({\n tag,\n importer,\n });\n\n completion.label = `<${completion.label}>`;\n completion.textEdit = TextEdit.replace(range, completion.label);\n result.push(completion);\n }\n }\n\n return result;\n }\n }\n}\n", "import { Diagnostic, DiagnosticSeverity } from \"vscode-languageserver\";\nimport { getCompilerInfo } from \"../../utils/compiler\";\nimport { getDocFile } from \"../../utils/doc-file\";\nimport type { Plugin } from \"../types\";\n\nconst markoErrorRegExp =\n /^(.+?)\\.marko(?:\\((\\d+)(?:\\s*,\\s*(\\d+))?\\))?: (.*)$/gm;\n\nexport const doValidate: Plugin[\"doValidate\"] = (doc) => {\n const fsPath = getDocFile(doc);\n const diagnostics: Diagnostic[] = [];\n\n const { compiler, translator, cache } = getCompilerInfo(doc);\n\n try {\n compiler.compileSync(doc.getText(), fsPath || \"untitled.marko\", {\n cache,\n translator,\n code: false,\n output: \"source\",\n sourceMaps: false,\n babelConfig: {\n caller: {\n name: \"@marko/language-server\",\n supportsStaticESM: true,\n supportsDynamicImport: true,\n supportsTopLevelAwait: true,\n supportsExportNamespaceFrom: true,\n },\n },\n });\n } catch (e) {\n let match: RegExpExecArray | null;\n while ((match = markoErrorRegExp.exec((e as Error).message))) {\n const [, , rawLine, rawCol, message] = match;\n const pos = {\n line: (parseInt(rawLine, 10) || 1) - 1,\n character: (parseInt(rawCol, 10) || 1) - 1,\n };\n diagnostics.push({\n range: { start: pos, end: pos },\n source: \"marko\",\n code: undefined,\n tags: undefined,\n severity: DiagnosticSeverity.Error,\n message,\n });\n }\n }\n\n return diagnostics;\n};\n", "import fs from \"fs\";\nimport { URI } from \"vscode-uri\";\nimport { Position, Range } from \"vscode-languageserver\";\nimport { TextDocument } from \"vscode-languageserver-textdocument\";\n\nexport const START_OF_FILE = Range.create(\n Position.create(0, 0),\n Position.create(0, 0)\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", "import type { Node } from \"../../../utils/parser\";\nimport { getDocFile } from \"../../../utils/doc-file\";\nimport type { HoverMeta, HoverResult } from \".\";\nimport getTagNameCompletion from \"../util/get-tag-name-completion\";\nimport { START_OF_FILE } from \"../../../utils/utils\";\nimport type { MarkupContent } from \"vscode-languageserver\";\n\nexport function OpenTagName({\n document,\n lookup,\n parsed,\n node,\n}: HoverMeta<Node.OpenTagName>): HoverResult {\n const importer = getDocFile(document);\n const tag = node.parent;\n const range = parsed.locationAt(node);\n const tagDef = tag.nameText && lookup.getTag(tag.nameText);\n\n if (tagDef) {\n const completion = getTagNameCompletion({\n tag: tagDef,\n range: START_OF_FILE,\n importer,\n });\n return {\n range,\n contents: completion.documentation as MarkupContent,\n };\n }\n}\n", "import type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport type { HoverParams, Hover } from \"vscode-languageserver\";\nimport { getCompilerInfo, parse } from \"../../../utils/compiler\";\nimport type { Plugin, Result } from \"../../types\";\nimport { NodeType } from \"../../../utils/parser\";\nimport { OpenTagName } from \"./OpenTagName\";\n\nexport type HoverResult = Result<Hover>;\nexport interface HoverMeta<N = unknown>\n extends ReturnType<typeof getCompilerInfo> {\n document: TextDocument;\n params: HoverParams;\n parsed: ReturnType<typeof parse>;\n offset: number;\n code: string;\n node: N;\n}\n\nconst handlers: Record<string, (data: HoverMeta<any>) => HoverResult> = {\n OpenTagName,\n};\n\nexport const doHover: Plugin[\"doHover\"] = async (doc, params) => {\n const parsed = parse(doc);\n const offset = doc.offsetAt(params.position);\n const node = parsed.nodeAt(offset);\n return await handlers[NodeType[node.type]]?.({\n document: doc,\n params,\n parsed,\n offset,\n node,\n code: doc.getText(),\n ...getCompilerInfo(doc),\n });\n};\n", "import path from \"path\";\nimport { URI } from \"vscode-uri\";\nimport { Range, LocationLink } from \"vscode-languageserver\";\nimport type { TagDefinition } from \"../../../utils/compiler\";\nimport RegExpBuilder from \"../../../utils/regexp-builder\";\nimport { START_OF_FILE, createTextDocument } from \"../../../utils/utils\";\nimport { Node, NodeType } from \"../../../utils/parser\";\nimport type { DefinitionMeta, DefinitionResult } from \".\";\n\nexport function OpenTagName({\n lookup,\n parsed,\n node,\n}: DefinitionMeta<Node.OpenTagName>): DefinitionResult {\n const tag = node.parent;\n let tagDef: TagDefinition | null | undefined;\n let range = START_OF_FILE;\n\n if (tag.type === NodeType.AttrTag) {\n let parentTag = tag.owner;\n while (parentTag?.type === NodeType.AttrTag) parentTag = parentTag.owner;\n tagDef =\n parentTag && parentTag.nameText\n ? lookup.getTag(parentTag.nameText)\n : undefined;\n } else {\n tagDef = tag.nameText ? lookup.getTag(tag.nameText) : undefined;\n }\n\n if (!tagDef) {\n return;\n }\n\n const tagEntryFile = tagDef.template || tagDef.renderer || tagDef.filePath;\n\n if (!path.isAbsolute(tagEntryFile)) {\n return;\n }\n\n if (/\\/marko(?:-tag)?\\.json$/.test(tagEntryFile)) {\n const tagDefDoc = createTextDocument(tagEntryFile);\n const match =\n RegExpBuilder`/\"(?:<${tag.nameText}>|${tag.nameText})\"\\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 parsed.locationAt(node)\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 { Range, LocationLink } from \"vscode-languageserver\";\nimport RegExpBuilder from \"../../../utils/regexp-builder\";\nimport { START_OF_FILE, createTextDocument } from \"../../../utils/utils\";\nimport type { Node } from \"../../../utils/parser\";\nimport type { DefinitionMeta, DefinitionResult } from \".\";\n\nexport function AttrName({\n lookup,\n parsed,\n node,\n}: DefinitionMeta<Node.AttrName>): DefinitionResult {\n const tagName = node.parent.parent.nameText;\n const attrName = parsed.read(node);\n if (attrName[0] === \"{\") return; // Ignore tag blocks.\n\n const tagDef = tagName && lookup.getTag(tagName);\n const attrDef = lookup.getAttribute(tagName || \"\", attrName);\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`/\"@${attrName}\"\\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 parsed.locationAt(node)\n ),\n ];\n}\n", "import type { DefinitionParams, DefinitionLink } from \"vscode-languageserver\";\nimport type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport { getCompilerInfo, parse } from \"../../../utils/compiler\";\nimport { NodeType } from \"../../../utils/parser\";\nimport type { Plugin, Result } from \"../../types\";\nimport { OpenTagName } from \"./OpenTagName\";\nimport { AttrName } from \"./AttrName\";\n\nexport type DefinitionResult = Result<DefinitionLink[]>;\nexport interface DefinitionMeta<N = unknown>\n extends ReturnType<typeof getCompilerInfo> {\n document: TextDocument;\n params: DefinitionParams;\n parsed: ReturnType<typeof parse>;\n offset: number;\n code: string;\n node: N;\n}\n\nconst handlers: Record<\n string,\n (data: DefinitionMeta<any>) => DefinitionResult\n> = {\n OpenTagName,\n AttrName,\n};\n\nexport const findDefinition: Plugin[\"findDefinition\"] = async (doc, params) => {\n const parsed = parse(doc);\n const offset = doc.offsetAt(params.position);\n const node = parsed.nodeAt(offset);\n return (\n (await handlers[NodeType[node.type]]?.({\n document: doc,\n params,\n parsed,\n offset,\n node,\n code: doc.getText(),\n ...getCompilerInfo(doc),\n })) || []\n );\n};\n", "import type { TaglibLookup } from \"@marko/babel-utils\";\nimport { DocumentLink } from \"vscode-languageserver\";\nimport type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport { URI } from \"vscode-uri\";\nimport { getCompilerInfo, parse } from \"../../utils/compiler\";\nimport { type Node, type Range, NodeType } from \"../../utils/parser\";\nimport resolveUrl from \"../../utils/resolve-url\";\nimport type { Plugin } from \"../types\";\nimport isDocumentLinkAttr from \"./util/is-document-link-attr\";\n\nconst importTagReg = /(['\"])<((?:[^\\1\\\\>]+|\\\\.)*)>?\\1/g;\nconst cache = new WeakMap<ReturnType<typeof parse>, DocumentLink[]>();\n\nexport const findDocumentLinks: Plugin[\"findDocumentLinks\"] = async (doc) => {\n const parsed = parse(doc);\n let result = cache.get(parsed);\n if (!result) {\n result = extractDocumentLinks(doc, parsed, getCompilerInfo(doc).lookup);\n cache.set(parsed, result);\n }\n return result;\n};\n\n/**\n * Iterate over the Marko CST and extract all the file links in the document.\n */\nfunction extractDocumentLinks(\n doc: TextDocument,\n parsed: ReturnType<typeof parse>,\n lookup: TaglibLookup\n): DocumentLink[] {\n if (URI.parse(doc.uri).scheme === \"untitled\") {\n return [];\n }\n\n const links: DocumentLink[] = [];\n const { program } = parsed;\n const code = doc.getText();\n const read = (range: Range) => code.slice(range.start, range.end);\n const visit = (node: Node.ChildNode) => {\n switch (node.type) {\n case NodeType.AttrTag:\n if (node.body) {\n for (const child of node.body) {\n visit(child);\n }\n }\n break;\n case NodeType.Tag:\n if (node.attrs && node.nameText) {\n for (const attr of node.attrs) {\n if (isDocumentLinkAttr(doc, node, attr)) {\n const resolved = resolveUrl(\n read(attr.value.value).slice(1, -1),\n doc.uri\n );\n if (resolved) {\n links.push(\n DocumentLink.create(\n parsed.locationAt(attr.value.value),\n resolveUrl(read(attr.value.value).slice(1, -1), doc.uri)\n )\n );\n }\n }\n }\n }\n if (node.body) {\n for (const child of node.body) {\n visit(child);\n }\n }\n\n break;\n }\n };\n\n for (const item of program.static) {\n // check for import statement (this currently only support the tag import shorthand).\n if (item.type === NodeType.Statement && code[item.start] === \"i\") {\n importTagReg.lastIndex = 0;\n const value = parsed.read(item);\n const match = importTagReg.exec(value);\n if (match) {\n const [{ length }, , tagName] = match;\n const tagDef = lookup.getTag(tagName);\n const fileForTag = tagDef && (tagDef.template || tagDef.renderer);\n\n if (fileForTag) {\n links.push(\n DocumentLink.create(\n parsed.locationAt({\n start: item.start + match.index,\n end: item.start + match.index + length,\n }),\n fileForTag\n )\n );\n }\n }\n }\n }\n\n for (const item of program.body) {\n visit(item);\n }\n\n return links;\n}\n", "import { URI } from \"vscode-uri\";\nimport type { TaglibLookup } from \"@marko/babel-utils\";\nimport { SymbolInformation, SymbolKind } from \"vscode-languageserver\";\nimport type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport { type Node, NodeType } from \"../../utils/parser\";\nimport { getCompilerInfo, parse } from \"../../utils/compiler\";\nimport type { Plugin } from \"../types\";\n\nconst cache = new WeakMap<ReturnType<typeof parse>, SymbolInformation[]>();\n\nexport const findDocumentSymbols: Plugin[\"findDocumentSymbols\"] = async (\n doc\n) => {\n const parsed = parse(doc);\n let result = cache.get(parsed);\n if (!result) {\n result = extractDocumentSymbols(doc, parsed, getCompilerInfo(doc).lookup);\n cache.set(parsed, result);\n }\n return result;\n};\n\n/**\n * Iterate over the Marko CST and extract all the symbols (mostly tags) in the document.\n */\nfunction extractDocumentSymbols(\n doc: TextDocument,\n parsed: ReturnType<typeof parse>,\n lookup: TaglibLookup\n): SymbolInformation[] {\n if (URI.parse(doc.uri).scheme === \"untitled\") {\n return [];\n }\n\n const symbols: SymbolInformation[] = [];\n const { program } = parsed;\n const visit = (node: Node.ChildNode) => {\n switch (node.type) {\n case NodeType.Tag:\n case NodeType.AttrTag:\n symbols.push(\n SymbolInformation.create(\n (node.type === NodeType.AttrTag\n ? node.nameText?.slice(node.nameText.indexOf(\"@\"))\n : node.nameText) || \"<${...}>\",\n (node.nameText &&\n lookup.getTag(node.nameText)?.html &&\n SymbolKind.Property) ||\n SymbolKind.Class,\n parsed.locationAt(node),\n doc.uri\n )\n );\n\n if (node.body) {\n for (const child of node.body) {\n visit(child);\n }\n }\n\n break;\n }\n };\n\n for (const item of program.body) {\n visit(item);\n }\n\n return symbols;\n}\n", "import { Range, TextEdit } from \"vscode-languageserver\";\nimport { URI } from \"vscode-uri\";\nimport * as prettier from \"prettier\";\nimport * as markoPrettier from \"prettier-plugin-marko\";\nimport { displayError } from \"../../utils/messages\";\nimport type { Plugin } from \"../types\";\n\nexport const format: Plugin[\"format\"] = async (doc, params, cancel) => {\n try {\n const { fsPath, scheme } = URI.parse(doc.uri);\n const text = doc.getText();\n const options: prettier.Options = {\n parser: \"marko\",\n filepath: fsPath,\n plugins: [markoPrettier],\n tabWidth: params.options.tabSize,\n useTabs: params.options.insertSpaces === false,\n ...(scheme === \"file\"\n ? await prettier\n .resolveConfig(fsPath, {\n editorconfig: true,\n })\n .catch(() => null)\n : null),\n };\n\n if (cancel.isCancellationRequested) return;\n\n // TODO: format selection\n return [\n TextEdit.replace(\n Range.create(doc.positionAt(0), doc.positionAt(text.length)),\n prettier.format(text, options)\n ),\n ];\n } catch (e) {\n displayError(e);\n }\n};\n", "import type { Plugin } from \"../types\";\nimport { doComplete } from \"./complete\";\nimport { doValidate } from \"./validate\";\nimport { doHover } from \"./hover\";\nimport { findDefinition } from \"./definition\";\nimport { findDocumentLinks } from \"./document-links\";\nimport { findDocumentSymbols } from \"./document-symbols\";\nimport { format } from \"./format\";\n\nexport default {\n doComplete,\n doValidate,\n doHover,\n findDefinition,\n findDocumentLinks,\n findDocumentSymbols,\n format,\n} as Plugin;\n", "import {\n ColorInformation,\n CompletionList,\n Diagnostic,\n DocumentHighlight,\n InsertReplaceEdit,\n Range,\n TextDocumentEdit,\n Location,\n TextEdit,\n DocumentLink,\n InitializeParams,\n ColorPresentation,\n SymbolInformation,\n} from \"vscode-languageserver\";\nimport {\n getCSSLanguageService,\n getLESSLanguageService,\n getSCSSLanguageService,\n type LanguageService,\n type LanguageServiceOptions,\n} from \"vscode-css-languageservice\";\nimport { TextDocument } from \"vscode-languageserver-textdocument\";\nimport { getCompilerInfo, parse } from \"../../utils/compiler\";\nimport type { Plugin } from \"../types\";\nimport { extractStyleSheets } from \"./extract\";\nimport resolveReference from \"../../utils/resolve-url\";\nimport fileSystemProvider from \"../../utils/file-system\";\n\ninterface StyleSheetInfo {\n virtualDoc: TextDocument;\n service: LanguageService;\n parsed: ReturnType<LanguageService[\"parseStylesheet\"]>;\n sourceOffsetAt(generatedOffset: number): number | undefined;\n generatedOffsetAt(sourceOffset: number): number | undefined;\n}\n\nconst cache = new WeakMap<\n ReturnType<typeof parse>,\n Record<string, StyleSheetInfo>\n>();\n\nconst services: Record<\n string,\n (options: LanguageServiceOptions) => LanguageService\n> = {\n css: getCSSLanguageService,\n less: getLESSLanguageService,\n scss: getSCSSLanguageService,\n};\nlet clientCapabilities: InitializeParams[\"capabilities\"] | undefined;\n\nconst StyleSheetService: Partial<Plugin> = {\n initialize(params) {\n clientCapabilities = params.capabilities;\n },\n async doComplete(doc, params) {\n const infoByExt = getStyleSheetInfo(doc);\n const sourceOffset = doc.offsetAt(params.position);\n\n for (const ext in infoByExt) {\n const info = infoByExt[ext];\n // Find the first stylesheet data that contains the offset.\n const generatedOffset = info.generatedOffsetAt(sourceOffset);\n if (generatedOffset === undefined) continue;\n\n const { service, virtualDoc } = info;\n const result = await service.doComplete2(\n virtualDoc,\n virtualDoc.positionAt(generatedOffset),\n info.parsed,\n { resolveReference }\n );\n\n if (result.itemDefaults) {\n const { editRange } = result.itemDefaults;\n if (editRange) {\n if (\"start\" in editRange) {\n result.itemDefaults.editRange = getSourceRange(\n doc,\n info,\n editRange\n );\n } else {\n editRange.insert = getSourceRange(doc, info, editRange.insert)!;\n editRange.replace = getSourceRange(doc, info, editRange.replace)!;\n }\n }\n }\n\n for (const item of result.items) {\n if (item.textEdit) {\n item.textEdit = getSourceInsertReplaceEdit(doc, info, item.textEdit);\n }\n\n if (item.additionalTextEdits) {\n item.additionalTextEdits = getSourceEdits(\n doc,\n info,\n item.additionalTextEdits\n );\n }\n }\n\n return result;\n }\n\n return CompletionList.create([], true);\n },\n findDefinition(doc, params) {\n const infoByExt = getStyleSheetInfo(doc);\n const sourceOffset = doc.offsetAt(params.position);\n\n for (const ext in infoByExt) {\n const info = infoByExt[ext];\n // Find the first stylesheet data that contains the offset.\n const generatedOffset = info.generatedOffsetAt(sourceOffset);\n if (generatedOffset === undefined) continue;\n\n const { service, virtualDoc } = info;\n const result = service.findDefinition(\n virtualDoc,\n virtualDoc.positionAt(generatedOffset),\n info.parsed\n );\n\n if (result) {\n const range = getSourceRange(doc, info, result.range);\n if (range) {\n return {\n range,\n uri: doc.uri,\n };\n }\n }\n\n break;\n }\n },\n findReferences(doc, params) {\n const infoByExt = getStyleSheetInfo(doc);\n const sourceOffset = doc.offsetAt(params.position);\n\n for (const ext in infoByExt) {\n const info = infoByExt[ext];\n // Find the first stylesheet data that contains the offset.\n const generatedOffset = info.generatedOffsetAt(sourceOffset);\n if (generatedOffset === undefined) continue;\n\n const { service, virtualDoc } = info;\n const result: Location[] = [];\n\n for (const location of service.findReferences(\n virtualDoc,\n virtualDoc.positionAt(generatedOffset),\n info.parsed\n )) {\n const range = getSourceRange(doc, info, location.range);\n if (range) {\n result.push({\n range,\n uri: location.uri,\n });\n }\n }\n\n return result.length ? result : undefined;\n }\n },\n findDocumentSymbols(doc) {\n const infoByExt = getStyleSheetInfo(doc);\n const result: SymbolInformation[] = [];\n\n for (const ext in infoByExt) {\n const info = infoByExt[ext];\n const { service, virtualDoc } = info;\n\n for (const symbol of service.findDocumentSymbols(\n virtualDoc,\n info.parsed\n )) {\n if (symbol.location.uri === doc.uri) {\n const range = getSourceRange(doc, info, symbol.location.range);\n if (range) {\n result.push({\n kind: symbol.kind,\n name: symbol.name,\n tags: symbol.tags,\n deprecated: symbol.deprecated,\n containerName: symbol.containerName,\n location: { uri: doc.uri, range },\n });\n }\n } else {\n result.push(symbol);\n }\n }\n }\n\n return result.length ? result : undefined;\n },\n async findDocumentLinks(doc) {\n const infoByExt = getStyleSheetInfo(doc);\n const result: DocumentLink[] = [];\n\n for (const ext in infoByExt) {\n const info = infoByExt[ext];\n const { service, virtualDoc } = info;\n\n for (const link of await service.findDocumentLinks2(\n virtualDoc,\n info.parsed,\n { resolveReference }\n )) {\n const range = getSourceRange(doc, info, link.range);\n if (range) {\n result.push({\n range,\n target: link.target,\n tooltip: link.tooltip,\n data: link.data,\n });\n }\n }\n }\n\n return result.length ? result : undefined;\n },\n findDocumentHighlights(doc, params) {\n const infoByExt = getStyleSheetInfo(doc);\n const sourceOffset = doc.offsetAt(params.position);\n\n for (const ext in infoByExt) {\n const info = infoByExt[ext];\n // Find the first stylesheet data that contains the offset.\n const generatedOffset = info.generatedOffsetAt(sourceOffset);\n if (generatedOffset === undefined) continue;\n\n const { service, virtualDoc } = info;\n const result: DocumentHighlight[] = [];\n\n for (const highlight of service.findDocumentHighlights(\n virtualDoc,\n virtualDoc.positionAt(generatedOffset),\n info.parsed\n )) {\n const range = getSourceRange(doc, info, highlight.range);\n if (range) {\n result.push({\n range,\n kind: highlight.kind,\n });\n }\n }\n\n return result.length ? result : undefined;\n }\n },\n findDocumentColors(doc) {\n const infoByExt = getStyleSheetInfo(doc);\n const result: ColorInformation[] = [];\n\n for (const ext in infoByExt) {\n const info = infoByExt[ext];\n const { service, virtualDoc } = info;\n\n for (const colorInfo of service.findDocumentColors(\n virtualDoc,\n info.parsed\n )) {\n const range = getSourceRange(doc, info, colorInfo.range);\n if (range) {\n result.push({\n range,\n color: colorInfo.color,\n });\n }\n }\n }\n\n return result.length ? result : undefined;\n },\n getColorPresentations(doc, params) {\n const infoByExt = getStyleSheetInfo(doc);\n const sourceOffset = doc.offsetAt(params.range.start);\n\n for (const ext in infoByExt) {\n const info = infoByExt[ext];\n // Find the first stylesheet data that contains the offset.\n const generatedOffsetStart = info.generatedOffsetAt(sourceOffset);\n if (generatedOffsetStart === undefined) continue;\n\n const generatedOffsetEnd = info.generatedOffsetAt(\n doc.offsetAt(params.range.end)\n );\n if (generatedOffsetEnd === undefined) continue;\n\n const { service, virtualDoc } = info;\n const result: ColorPresentation[] = [];\n\n for (const colorPresentation of service.getColorPresentations(\n virtualDoc,\n info.parsed,\n params.color,\n Range.create(\n virtualDoc.positionAt(generatedOffsetStart),\n virtualDoc.positionAt(generatedOffsetEnd)\n )\n )) {\n const textEdit =\n colorPresentation.textEdit &&\n getSourceEdit(doc, info, colorPresentation.textEdit);\n const additionalTextEdits =\n colorPresentation.additionalTextEdits &&\n getSourceEdits(doc, info, colorPresentation.additionalTextEdits);\n\n if (textEdit || additionalTextEdits) {\n result.push({\n label: colorPresentation.label,\n textEdit,\n additionalTextEdits,\n });\n }\n }\n\n return result.length ? result : undefined;\n }\n },\n doHover(doc, params) {\n const infoByExt = getStyleSheetInfo(doc);\n const sourceOffset = doc.offsetAt(params.position);\n\n for (const ext in infoByExt) {\n const info = infoByExt[ext];\n // Find the first stylesheet data that contains the offset.\n const generatedOffset = info.generatedOffsetAt(sourceOffset);\n if (generatedOffset === undefined) continue;\n\n const { service, virtualDoc } = info;\n const result = service.doHover(\n virtualDoc,\n virtualDoc.positionAt(generatedOffset),\n info.parsed\n );\n\n if (result) {\n if (result.range) {\n const range = getSourceRange(doc, info, result.range);\n if (range) {\n return {\n range,\n contents: result.contents,\n };\n }\n } else {\n return result;\n }\n }\n }\n },\n async doRename(doc, params) {\n const infoByExt = getStyleSheetInfo(doc);\n const sourceOffset = doc.offsetAt(params.position);\n\n for (const ext in infoByExt) {\n const info = infoByExt[ext];\n // Find the first stylesheet data that contains the offset.\n const generatedOffset = info.generatedOffsetAt(sourceOffset);\n if (generatedOffset === undefined) continue;\n\n const { service, virtualDoc } = info;\n const result = service.doRename(\n virtualDoc,\n virtualDoc.positionAt(generatedOffset),\n params.newName,\n info.parsed\n );\n\n if (result.changes) {\n for (const uri in result.changes) {\n if (uri === doc.uri) {\n result.changes[uri] =\n getSourceEdits(doc, info, result.changes[uri]) || [];\n }\n }\n }\n\n if (result.documentChanges) {\n for (const change of result.documentChanges) {\n if (TextDocumentEdit.is(change)) {\n if (change.textDocument.uri === doc.uri) {\n change.edits = getSourceEdits(doc, info, change.edits) || [];\n }\n }\n }\n }\n\n return result;\n }\n },\n doCodeActions(doc, params) {\n const infoByExt = getStyleSheetInfo(doc);\n const sourceOffset = doc.offsetAt(params.range.start);\n\n for (const ext in infoByExt) {\n const info = infoByExt[ext];\n // Find the first stylesheet data that contains the offset.\n const generatedOffsetStart = info.generatedOffsetAt(sourceOffset);\n if (generatedOffsetStart === undefined) continue;\n\n const generatedOffsetEnd = info.generatedOffsetAt(\n doc.offsetAt(params.range.end)\n );\n if (generatedOffsetEnd === undefined) continue;\n\n const { service, virtualDoc } = info;\n const result = service.doCodeActions(\n virtualDoc,\n Range.create(\n virtualDoc.positionAt(generatedOffsetStart),\n virtualDoc.positionAt(generatedOffsetEnd)\n ),\n params.context,\n info.parsed\n );\n\n for (const command of result) {\n const edits = command.arguments?.[2];\n if (edits && Array.isArray(edits) && isTextEdit(edits[0])) {\n command.arguments![2] = getSourceEdits(doc, info, edits);\n }\n }\n\n return result;\n }\n },\n doValidate(doc) {\n const infoByExt = getStyleSheetInfo(doc);\n const result: Diagnostic[] = [];\n\n for (const ext in infoByExt) {\n const info = infoByExt[ext];\n\n for (const diag of info.service.doValidation(\n info.virtualDoc,\n info.parsed\n )) {\n const range = getSourceRange(doc, info, diag.range);\n if (range) {\n diag.range = range;\n result.push(diag);\n }\n }\n }\n\n return result.length ? result : undefined;\n },\n};\n\nexport { StyleSheetService as default };\n\nfunction getSourceEdits(\n doc: TextDocument,\n info: StyleSheetInfo,\n edits: TextEdit[]\n): TextEdit[] | undefined {\n const result: TextEdit[] = [];\n\n for (const edit of edits) {\n const sourceEdit = getSourceEdit(doc, info, edit);\n if (sourceEdit) {\n result.push(sourceEdit);\n }\n }\n\n return result.length ? result : undefined;\n}\n\nfunction getSourceEdit(\n doc: TextDocument,\n info: StyleSheetInfo,\n textEdit: TextEdit\n): TextEdit | undefined {\n const range = getSourceRange(doc, info, textEdit.range);\n if (range) {\n return {\n newText: textEdit.newText,\n range,\n };\n }\n}\n\nfunction getSourceInsertReplaceEdit(\n doc: TextDocument,\n info: StyleSheetInfo,\n textEdit: TextEdit | InsertReplaceEdit\n): TextEdit | InsertReplaceEdit | undefined {\n if (isTextEdit(textEdit)) {\n return getSourceEdit(doc, info, textEdit);\n } else if (textEdit.replace) {\n const range = getSourceRange(doc, info, textEdit.replace);\n if (range) {\n return {\n newText: textEdit.newText,\n replace: range,\n } as InsertReplaceEdit;\n }\n } else {\n const range = getSourceRange(doc, info, textEdit.insert);\n if (range) {\n return {\n newText: textEdit.newText,\n insert: range,\n } as InsertReplaceEdit;\n }\n }\n}\n\nfunction getSourceRange(\n doc: TextDocument,\n info: StyleSheetInfo,\n range: Range\n): Range | undefined {\n const start = info.sourceOffsetAt(info.virtualDoc.offsetAt(range.start));\n if (start === undefined) return;\n\n let end: number | undefined = start;\n\n if (\n range.start.line !== range.end.line ||\n range.start.character !== range.end.character\n ) {\n end = info.sourceOffsetAt(info.virtualDoc.offsetAt(range.end));\n if (end === undefined) return;\n }\n\n const pos = doc.positionAt(start);\n return {\n start: pos,\n end: start === end ? pos : doc.positionAt(end),\n };\n}\n\nfunction getStyleSheetInfo(doc: TextDocument): Record<string, StyleSheetInfo> {\n const parsed = parse(doc);\n let cached = cache.get(parsed);\n\n if (!cached) {\n const results = extractStyleSheets(\n doc.getText(),\n parsed.program,\n getCompilerInfo(doc).lookup\n );\n\n cached = {};\n\n for (const ext in results) {\n const service = services[ext]?.({\n fileSystemProvider,\n clientCapabilities,\n });\n if (!service) continue;\n\n const { generated, sourceOffsetAt, generatedOffsetAt } = results[ext];\n const virtualDoc = TextDocument.create(\n doc.uri,\n \"css\",\n doc.version,\n generated\n );\n\n cached[ext] = {\n service,\n virtualDoc,\n sourceOffsetAt,\n generatedOffsetAt,\n parsed: service.parseStylesheet(virtualDoc),\n };\n }\n\n cache.set(parsed, cached);\n }\n\n return cached;\n}\n\nfunction isTextEdit(edit: TextEdit | InsertReplaceEdit): edit is TextEdit {\n return (edit as TextEdit).range !== undefined;\n}\n", "import type { Range } from \"./parser\";\n\n/**\n * Utility to build up generate code from source ranges while maintaining a source mapping.\n */\nexport function createExtractor(code: string) {\n let generated = \"\";\n const generatedMap: number[] = []; // grouped in sets of [generatedStart, sourceStart, sourceEnd] and sorted by generatedStart\n return {\n write(strs: TemplateStringsArray, ...exprs: (string | Range)[]) {\n const len = exprs.length;\n for (let i = 0; i < len; i++) {\n const expr = exprs[i];\n generated += strs[i];\n\n if (typeof expr === \"string\") {\n generated += expr;\n } else {\n generatedMap.push(generated.length, expr.start, expr.end);\n generated += code.slice(expr.start, expr.end);\n }\n }\n\n generated += strs[len];\n },\n end() {\n const sourceMap: typeof generatedMap = generatedMap.slice(); // grouped in sets of [generatedStart, sourceStart, sourceEnd] and sorted by sourceStart\n // Quick sort generatedMap by sourceStart\n (function sort(left: number, right: number) {\n if (left < right) {\n let next = left;\n\n for (let i = left; i <= right; i += 3) {\n if (sourceMap[i] <= sourceMap[right]) {\n [sourceMap[next - 1], sourceMap[i - 1]] = [\n sourceMap[i - 1],\n sourceMap[next - 1],\n ];\n [sourceMap[next], sourceMap[i]] = [sourceMap[i], sourceMap[next]];\n [sourceMap[next + 1], sourceMap[i + 1]] = [\n sourceMap[i + 1],\n sourceMap[next + 1],\n ];\n next += 3;\n }\n }\n\n next -= 3;\n sort(left, next - 3);\n sort(next + 3, right);\n }\n })(1, sourceMap.length - 2);\n return {\n generated,\n sourceOffsetAt(generatedOffset: number): number | undefined {\n let max = generatedMap.length / 3;\n let min = 0;\n\n while (min < max) {\n const mid = (1 + min + max) >>> 1;\n\n if (generatedMap[mid * 3] <= generatedOffset) {\n min = mid;\n } else {\n max = mid - 1;\n }\n }\n\n const key = min * 3;\n const generatedStart = generatedMap[key];\n const sourceStart = generatedMap[key + 1];\n const sourceEnd = generatedMap[key + 2];\n return sourceEnd - sourceStart < generatedOffset - generatedStart\n ? undefined\n : sourceStart + (generatedOffset - generatedStart);\n },\n generatedOffsetAt(sourceOffset: number): number | undefined {\n let max = sourceMap.length / 3;\n let min = 0;\n\n while (min < max) {\n const mid = (1 + min + max) >>> 1;\n\n if (sourceMap[mid * 3 + 1] <= sourceOffset) {\n min = mid;\n } else {\n max = mid - 1;\n }\n }\n\n const key = min * 3;\n const sourceStart = sourceMap[key + 1];\n const sourceEnd = sourceMap[key + 2];\n if (sourceOffset < sourceStart || sourceOffset > sourceEnd)\n return undefined;\n\n const generatedStart = sourceMap[key];\n return generatedStart + (sourceOffset - sourceStart);\n },\n };\n },\n };\n}\n", "import type { TaglibLookup } from \"@marko/babel-utils\";\nimport { createExtractor } from \"../../utils/extractor\";\nimport { Node, Range, NodeType } from \"../../utils/parser\";\n\n/**\n * Iterate over the Marko CST and extract all the stylesheets.\n */\nexport function extractStyleSheets(\n code: string,\n program: Node.Program,\n lookup: TaglibLookup\n) {\n let placeholderId = 0;\n const extractorsByExt: Record<\n string,\n ReturnType<typeof createExtractor>\n > = {};\n const read = (range: Range) => code.slice(range.start, range.end);\n const getExtractor = (ext: string) =>\n extractorsByExt[ext] || (extractorsByExt[ext] = createExtractor(code));\n const getFileExtFromTag = (tag: Node.Tag) => {\n const prefixEnd = tag.shorthandClassNames\n ? tag.shorthandClassNames.at(-1)!.end\n : tag.name.end;\n\n return tag.shorthandClassNames\n ? read({\n start: tag.shorthandClassNames[0].start,\n end: prefixEnd,\n }).replace(/^.*\\./, \"\")\n : \"css\";\n };\n const visit = (node: Node.ChildNode) => {\n switch (node.type) {\n case NodeType.AttrTag:\n if (node.body) {\n for (const child of node.body) {\n visit(child);\n }\n }\n break;\n case NodeType.Tag:\n if (node.nameText === \"style\" && node.concise && node.attrs) {\n const block = node.attrs.at(-1)!;\n // Adds style blocks to the style sheet.\n if (block.type === NodeType.AttrNamed && code[block.start] === \"{\") {\n getExtractor(getFileExtFromTag(node)).write`${{\n start: block.start + 1,\n end: block.end - 1,\n }}`;\n break;\n }\n }\n\n if (node.body) {\n if (node.nameText === \"style\") {\n const ext = getFileExtFromTag(node);\n for (const child of node.body) {\n switch (child.type) {\n case NodeType.Text:\n // Add all the text nodes to the stylesheet.\n getExtractor(ext).write`${child}`;\n break;\n case NodeType.Placeholder:\n // Eventually we'll want to support placeholders in stylesheets, this just pretends they are custom properties.\n getExtractor(ext).write`${`var(--_${placeholderId++})`}`;\n break;\n }\n }\n } else {\n for (const child of node.body) {\n visit(child);\n }\n }\n }\n\n if (node.attrs) {\n for (const attr of node.attrs) {\n if (\n // Check for string literal attribute values.\n attr.type === NodeType.AttrNamed &&\n attr.value?.type === NodeType.AttrValue &&\n /^['\"]$/.test(code[attr.value.value.start])\n ) {\n const name = read(attr.name);\n\n // TODO: support #style directive with custom extension, eg `#style.less=\"\"`.\n // /^#style(?:\\..*)/.test(name)\n\n // Adds inline style and #style attributes to the stylesheet.\n if (\n name === \"#style\" ||\n (name === \"style\" &&\n node.nameText &&\n name === \"style\" &&\n lookup.getTag(node.nameText)?.html)\n ) {\n // Add inline \"style\" attribute.\n getExtractor(\"css\").write`:root{${{\n start: attr.value.value.start + 1,\n end: attr.value.value.end - 1,\n }}}`;\n }\n }\n }\n }\n break;\n }\n };\n\n for (const node of program.body) visit(node);\n\n const resultsByExt: Record<\n string,\n ReturnType<ReturnType<typeof createExtractor>[\"end\"]>\n > = {};\n\n for (const ext in extractorsByExt) {\n resultsByExt[ext] = extractorsByExt[ext].end();\n }\n\n return resultsByExt;\n}\n"],
5
- "mappings": "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",
6
- "names": ["import_vscode_languageserver_textdocument", "import_util", "path", "NodeType", "parse", "lassoPackageRoot", "resolveFrom", "cache", "import_vscode_languageserver", "import_vscode_languageserver", "import_path", "import_vscode_languageserver", "import_vscode_uri", "path", "tag", "import_vscode_languageserver", "import_path", "import_vscode_languageserver", "stat", "fs", "path", "import_vscode_languageserver", "parse", "import_vscode_languageserver", "cache", "import_vscode_uri", "import_vscode_languageserver", "fs", "OpenTagName", "handlers", "OpenTagName", "parse", "import_path", "import_vscode_uri", "import_vscode_languageserver", "OpenTagName", "path", "import_vscode_uri", "import_vscode_languageserver", "AttrName", "handlers", "OpenTagName", "AttrName", "parse", "import_vscode_languageserver", "import_vscode_uri", "importTagReg", "parse", "import_vscode_uri", "import_vscode_languageserver", "cache", "parse", "import_vscode_languageserver", "import_vscode_uri", "format", "format", "import_vscode_languageserver", "import_vscode_css_languageservice", "import_vscode_languageserver_textdocument", "cache", "service", "parse", "cache", "service", "connection"]
3
+ "sources": ["../src/index.ts", "../src/utils/project.ts", "../src/utils/text-documents.ts", "../src/utils/workspace.ts", "../src/utils/messages.ts", "../src/utils/file.ts", "../src/service/index.ts", "../src/service/marko/complete/index.ts", "../src/service/marko/complete/AttrName.ts", "../src/service/marko/complete/AttrValue.ts", "../src/service/marko/util/is-document-link-attr.ts", "../src/utils/file-system.ts", "../src/utils/resolve-url.ts", "../src/service/marko/complete/Import.ts", "../src/service/marko/util/get-tag-name-completion.ts", "../src/service/marko/complete/OpenTagName.ts", "../src/service/marko/complete/Tag.ts", "../src/service/marko/validate.ts", "../src/service/marko/hover/index.ts", "../src/utils/constants.ts", "../src/service/marko/hover/OpenTagName.ts", "../src/service/marko/definition/index.ts", "../src/service/marko/definition/AttrName.ts", "../src/utils/regexp-builder.ts", "../src/service/marko/definition/OpenTagName.ts", "../src/service/marko/document-links.ts", "../src/service/marko/document-symbols.ts", "../src/service/marko/format.ts", "../src/service/marko/index.ts", "../src/service/script/index.ts", "../src/ts-plugin/host.ts", "../src/utils/get-runtime-types.ts", "../src/utils/get-script-lang.ts", "../src/utils/get-component-filename.ts", "../src/service/style/index.ts"],
4
+ "sourcesContent": ["import { inspect, isDeepStrictEqual } from \"util\";\n\nimport {\n DefinitionLink,\n Diagnostic,\n ProposedFeatures,\n TextDocumentSyncKind,\n createConnection,\n} from \"vscode-languageserver/node\";\nimport type { TextDocument } from \"vscode-languageserver-textdocument\";\n\nimport { getMarkoProject, getMarkoProjects } from \"./utils/project\";\nimport * as documents from \"./utils/text-documents\";\nimport * as workspace from \"./utils/workspace\";\nimport setupMessages from \"./utils/messages\";\nimport { getFSDir } from \"./utils/file\";\nimport service from \"./service\";\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}\nconst connection = createConnection(ProposedFeatures.all);\nconst prevDiags = new WeakMap<TextDocument, Diagnostic[]>();\nlet diagnosticTimeout: ReturnType<typeof setTimeout> | undefined;\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(async (params) => {\n setupMessages(connection);\n await service.initialize(params);\n\n return {\n capabilities: {\n textDocumentSync: TextDocumentSyncKind.Incremental,\n documentFormattingProvider: true,\n definitionProvider: true,\n hoverProvider: true,\n renameProvider: true,\n codeActionProvider: true,\n referencesProvider: true,\n documentLinkProvider: { resolveProvider: false },\n colorProvider: true,\n documentHighlightProvider: true,\n documentSymbolProvider: true,\n completionProvider: {\n resolveProvider: true,\n triggerCharacters: [\n \".\",\n \":\",\n \"<\",\n \">\",\n \"@\",\n \"/\",\n '\"',\n \"'\",\n \"`\",\n \" \",\n \"=\",\n \"*\",\n \"#\",\n \"$\",\n \"+\",\n \"^\",\n \"(\",\n \"[\",\n \"-\",\n ],\n },\n },\n };\n});\n\nworkspace.setup(connection);\nworkspace.onConfigChange(validateDocs);\n\ndocuments.setup(connection);\ndocuments.onFileChange((changeDoc) => {\n if (changeDoc) {\n queueDiagnostic();\n getMarkoProject(getFSDir(changeDoc)).cache.delete(changeDoc);\n } else {\n validateDocs();\n }\n});\n\nconnection.onCompletion(async (params, cancel) => {\n return (\n (await service.doComplete(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onCompletionResolve(async (item, cancel) => {\n return (await service.doCompletionResolve(item, cancel)) || item;\n});\n\nconnection.onDefinition(async (params, cancel) => {\n return (\n ((await service.findDefinition(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) as DefinitionLink[]) || null\n );\n});\n\nconnection.onReferences(async (params, cancel) => {\n return (\n (await service.findReferences(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onDocumentLinks(async (params, cancel) => {\n return (\n (await service.findDocumentLinks(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onDocumentSymbol(async (params, cancel) => {\n return (\n (await service.findDocumentSymbols(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onDocumentHighlight(async (params, cancel) => {\n return (\n (await service.findDocumentHighlights(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onDocumentColor(async (params, cancel) => {\n return (\n (await service.findDocumentColors(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onColorPresentation(async (params, cancel) => {\n return (\n (await service.getColorPresentations(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onHover(async (params, cancel) => {\n return (\n (await service.doHover(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onRenameRequest(async (params, cancel) => {\n return (\n (await service.doRename(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onCodeAction(async (params, cancel) => {\n return (\n (await service.doCodeActions(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nconnection.onDocumentFormatting(async (params, cancel) => {\n return (\n (await service.format(\n documents.get(params.textDocument.uri)!,\n params,\n cancel\n )) || null\n );\n});\n\nfor (const command in service.commands) {\n connection.onRequest(command, service.commands[command]);\n}\n\nfunction validateDocs() {\n queueDiagnostic();\n\n for (const project of getMarkoProjects()) {\n project.cache.clear();\n project.compiler.taglib.clearCaches();\n }\n}\n\nfunction queueDiagnostic() {\n clearTimeout(diagnosticTimeout);\n const id = (diagnosticTimeout = setTimeout(async () => {\n const results = await Promise.all(\n Array.from(documents.getAllOpen()).map(async (doc) => {\n if (!documents.isOpen(doc)) {\n prevDiags.delete(doc);\n return;\n }\n const prevDiag = prevDiags.get(doc) || [];\n const nextDiag = (await service.doValidate(doc)) || [];\n if (isDeepStrictEqual(prevDiag, nextDiag)) return;\n return [doc, nextDiag] as const;\n })\n );\n\n // Check that it wasn't canceled.\n if (id === diagnosticTimeout) {\n for (const result of results) {\n if (result) {\n const [doc, diag] = result;\n prevDiags.set(doc, diag);\n connection.sendDiagnostics({\n uri: doc.uri,\n diagnostics: diag,\n });\n }\n }\n }\n }, 400));\n}\n\nconnection.listen();\n", "import type { TaglibLookup } from \"@marko/babel-utils\";\nimport * as defaultCompiler from \"@marko/compiler\";\nimport * as defaultTranslator from \"@marko/translator-default\";\nimport lassoPackageRoot from \"lasso-package-root\";\nimport resolveFrom from \"resolve-from\";\n\nconst cwd = process.cwd();\nconst kTaglib = Symbol(\"taglib\");\nconst projectsByDir = new Map<string, MarkoProject>();\nconst defaultProject: MarkoProject = {\n rootDir: cwd,\n cache: new Map(),\n lookup: defaultCompiler.taglib.buildLookup(cwd, defaultTranslator),\n compiler: defaultCompiler,\n translator: defaultTranslator,\n};\ndefaultCompiler.configure({ translator: defaultTranslator });\n\nexport type MarkoProject = {\n rootDir: string;\n cache: Map<unknown, unknown>;\n lookup: TaglibLookup;\n compiler: typeof import(\"@marko/compiler\");\n translator: defaultCompiler.Config[\"translator\"];\n};\n\nexport function getMarkoProject(dir?: string): MarkoProject {\n if (!dir) return defaultProject;\n\n let project = projectsByDir.get(dir);\n if (!project) {\n project = loadProject(dir);\n projectsByDir.set(dir, project);\n }\n\n return project;\n}\n\nexport function getMarkoProjects() {\n return new Set(projectsByDir.values());\n}\n\nfunction loadProject(dir: string): MarkoProject {\n const rootDir = lassoPackageRoot.getRootDir(dir) || cwd;\n const pkgPath = resolveFrom.silent(rootDir, \"@marko/compiler/package.json\");\n const pkg = pkgPath && require(pkgPath);\n const cache = new Map();\n let translator = defaultTranslator;\n let compiler = defaultCompiler;\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 checkTranslator = ([] 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 (checkTranslator === \"marko\" || !checkTranslator) {\n // Fallback to compiler default translator\n checkTranslator = require(resolveFrom(dir, \"@marko/compiler/config\"))\n .translator as string;\n }\n\n [compiler, translator] = [\n require(resolveFrom(dir, \"@marko/compiler\")),\n require(resolveFrom(dir, checkTranslator)),\n ];\n // eslint-disable-next-line no-empty\n } catch {}\n }\n\n return {\n rootDir,\n cache,\n get lookup() {\n let lookup: TaglibLookup = cache.get(kTaglib);\n if (lookup === undefined) {\n // Lazily build the lookup, and ensure it's re-created whenever the cache is cleared.\n try {\n lookup = compiler.taglib.buildLookup(dir, translator);\n } catch {\n lookup = defaultProject.lookup;\n }\n\n cache.set(kTaglib, lookup);\n }\n\n return lookup;\n },\n compiler,\n translator,\n };\n}\n", "import fs from \"fs\";\nimport { URI } from \"vscode-uri\";\nimport { Connection, FileChangeType } from \"vscode-languageserver\";\nimport { TextDocument } from \"vscode-languageserver-textdocument\";\n\nexport type FileChangeHandler = (document: TextDocument | undefined) => void;\n\nconst docs = new Map<string, TextDocument>();\nconst openDocs = new Set<TextDocument>();\nconst fileExists = new Map<string, boolean>();\nconst fileChangeHandlers: Set<FileChangeHandler> = new Set();\n\nexport let projectVersion = 0;\n\nexport function onFileChange(handler: FileChangeHandler) {\n fileChangeHandlers.add(handler);\n}\n\nexport function getAllOpen() {\n return openDocs;\n}\n\nexport function get(uri: string) {\n const doc = docs.get(uri);\n if (doc) return doc;\n\n const { fsPath, scheme } = URI.parse(uri);\n if (scheme === \"file\") {\n if (fileExists.get(uri) === false) return undefined;\n try {\n const newDoc = TextDocument.create(\n uri,\n getLanguageId(uri),\n fs.statSync(fsPath).mtimeMs,\n fs.readFileSync(fsPath, \"utf-8\")\n );\n\n docs.set(uri, newDoc);\n fileExists.set(uri, true);\n return newDoc;\n } catch {\n fileExists.set(uri, false);\n }\n }\n}\n\nexport function exists(uri: string) {\n const cached = fileExists.get(uri);\n if (cached !== undefined) return cached;\n\n const { fsPath, scheme } = URI.parse(uri);\n if (scheme === \"file\") {\n try {\n fs.accessSync(fsPath);\n fileExists.set(uri, true);\n return true;\n } catch {\n fileExists.set(uri, false);\n return false;\n }\n }\n\n return false;\n}\n\nexport function isOpen(doc: TextDocument) {\n return openDocs.has(doc);\n}\n\nexport function setup(connection: Connection) {\n connection.onDidOpenTextDocument((params) => {\n const ref = params.textDocument;\n const existingDoc = docs.get(ref.uri);\n projectVersion++;\n\n if (existingDoc) {\n if (existingDoc.version === ref.version) {\n openDocs.add(existingDoc);\n return;\n }\n\n openDocs.delete(existingDoc);\n docs.delete(ref.uri);\n }\n\n const newDoc = TextDocument.create(\n ref.uri,\n ref.languageId,\n ref.version,\n ref.text\n );\n\n openDocs.add(newDoc);\n fileExists.set(ref.uri, true);\n docs.set(ref.uri, newDoc);\n });\n\n connection.onDidChangeTextDocument((params) => {\n const ref = params.textDocument;\n const changes = params.contentChanges;\n const doc = docs.get(ref.uri);\n if (changes.length > 0 && ref.version != null && doc) {\n TextDocument.update(doc, changes, ref.version);\n emitFileChange(doc);\n }\n });\n\n connection.onDidCloseTextDocument((params) => {\n const ref = params.textDocument;\n const doc = docs.get(ref.uri);\n if (doc) {\n projectVersion++;\n openDocs.delete(doc);\n\n if (URI.parse(ref.uri).scheme !== \"file\") {\n docs.delete(ref.uri);\n }\n }\n });\n\n connection.onDidChangeWatchedFiles(async (params) => {\n for (const change of params.changes) {\n switch (change.type) {\n case FileChangeType.Created:\n fileExists.set(change.uri, true);\n break;\n case FileChangeType.Deleted:\n case FileChangeType.Changed: {\n fileExists.set(change.uri, change.type === FileChangeType.Changed);\n\n // When a file that's in our cache is changed or deleted and not in an open editor\n // we clear the file from the cache since it will be reloaded when read.\n const doc = docs.get(change.uri);\n if (doc && !openDocs.has(doc)) {\n docs.delete(change.uri);\n }\n }\n }\n }\n\n emitFileChange(undefined);\n });\n}\n\nfunction getLanguageId(uri: string) {\n const ext = uri.slice(uri.lastIndexOf(\".\") + 1);\n switch (ext) {\n case \"cjs\":\n case \"mjs\":\n case \"js\":\n return \"javascript\";\n case \"cts\":\n case \"mts\":\n case \"ts\":\n return \"typescript\";\n default:\n return ext;\n }\n}\n\nfunction emitFileChange(doc: TextDocument | undefined) {\n projectVersion++;\n\n for (const handler of fileChangeHandlers) {\n handler(doc);\n }\n}\n", "import type { Connection } from \"vscode-languageserver\";\n\nlet connection!: Connection;\nconst configChangeHandlers: Set<ConfigChangeHandler> = new Set();\nconst settingsCache = new Map<string, any>();\n\nexport async function getConfig<T = any>(section: string): Promise<T> {\n let cached = settingsCache.get(section);\n if (!cached) {\n try {\n cached = (await connection.workspace.getConfiguration(section)) || {};\n settingsCache.set(section, cached);\n } catch {\n // ignore\n }\n }\n\n return cached;\n}\n\nexport type ConfigChangeHandler = () => void;\nexport function onConfigChange(handler: ConfigChangeHandler) {\n configChangeHandlers.add(handler);\n}\n\nexport function setup(_: Connection) {\n connection = _;\n connection.onDidChangeConfiguration(() => {\n settingsCache.clear();\n emitConfigChange();\n });\n}\n\nfunction emitConfigChange() {\n for (const handler of configChangeHandlers) {\n handler();\n }\n}\n", "import { inspect } from \"util\";\n\nimport type { Connection } from \"vscode-languageserver\";\n\nlet connection!: Connection;\nconst previousMessagesByType = new Map<string, string[]>();\nexport default function setup(_: Connection) {\n connection = _;\n}\n\nexport function displayInformation(data: unknown) {\n display(\"showInformation\", data);\n}\n\nexport function displayWarning(data: unknown) {\n display(\"showWarning\", data);\n}\n\nexport function displayError(data: unknown) {\n display(\"showError\", data);\n}\n\nfunction display(type: string, data: unknown) {\n const msg =\n typeof data === \"string\" ? data : inspect(data, { colors: false });\n\n const previousMessages = previousMessagesByType.get(type);\n if (previousMessages) {\n if (previousMessages.includes(msg)) return;\n\n previousMessages.push(msg);\n\n // Only keep the last 3 messages.\n if (previousMessages.length > 3) {\n previousMessages.unshift();\n }\n } else {\n previousMessagesByType.set(type, [msg]);\n }\n\n setImmediate(() => connection.sendNotification(type, msg));\n}\n", "import path from \"path\";\n\nimport type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport { type Parsed, parse } from \"@marko/language-tools\";\nimport { URI } from \"vscode-uri\";\nimport { MarkoProject, getMarkoProject } from \"./project\";\n\nconst processorCaches = new WeakMap<Parsed, Map<unknown, unknown>>();\n\nexport interface MarkoFile {\n project: MarkoProject;\n uri: string;\n scheme: string;\n version: number;\n filename: string;\n dirname: string;\n parsed: Parsed;\n code: string;\n}\n\nexport function getFSDir(doc: TextDocument): string | undefined {\n const filename = getFSPath(doc);\n return filename ? path.dirname(filename) : undefined;\n}\n\nexport function getFSPath(doc: TextDocument): string | undefined {\n return URI.parse(doc.uri).fsPath;\n}\n\nexport function getMarkoFile(doc: TextDocument): MarkoFile {\n const { uri } = doc;\n const { fsPath: filename, scheme } = URI.parse(uri);\n const dirname = filename && path.dirname(filename);\n const project = getMarkoProject(dirname);\n const cache = project.cache as Map<TextDocument, MarkoFile>;\n let file = cache.get(doc);\n if (!file) {\n const { version } = doc;\n const code = doc.getText();\n const parsed = parse(code, filename);\n cache.set(\n doc,\n (file = {\n project,\n uri,\n scheme,\n version,\n filename,\n dirname,\n parsed,\n code,\n })\n );\n }\n\n return file;\n}\n\n/**\n * Run some processing against a parsed document and cache the result.\n * Anytime the document changes, the cache is cleared.\n */\nexport function processDoc<T>(\n doc: TextDocument,\n process: (file: MarkoFile) => T\n): T {\n const file = getMarkoFile(doc);\n const cache = processorCaches.get(file.parsed) as\n | Map<typeof process, T>\n | undefined;\n let result: T | undefined;\n\n if (cache) {\n result = cache.get(process);\n if (!result) {\n result = process(file);\n cache.set(process, result);\n }\n } else {\n result = process(file);\n processorCaches.set(file.parsed, new Map([[process, result]]));\n }\n\n return result;\n}\n", "import type {\n CodeAction,\n ColorInformation,\n ColorPresentation,\n Command,\n CompletionItem,\n DefinitionLink,\n Diagnostic,\n DocumentHighlight,\n DocumentLink,\n Hover,\n Location,\n MarkedString,\n Range,\n SymbolInformation,\n WorkspaceEdit,\n} from \"vscode-languageserver\";\n\nimport { MarkupContent, MarkupKind } from \"vscode-languageserver\";\n\nimport type { Plugin } from \"./types\";\nimport MarkoPlugin from \"./marko\";\nimport ScriptPlugin from \"./script\";\nimport StylePlugin from \"./style\";\n\nconst REG_MARKDOWN_CHARS = /[\\\\`*_{}[\\]<>()#+.!|-]/g;\nconst plugins = [MarkoPlugin, ScriptPlugin, StylePlugin];\n\n/**\n * Facade to all embedded plugins, eg css, typescript and our own.\n */\nconst service: Plugin = {\n commands: Object.assign({}, ...plugins.map(({ commands }) => commands)),\n async initialize(params) {\n await Promise.allSettled(\n plugins.map((plugin) => plugin.initialize?.(params))\n );\n },\n async doComplete(doc, params, cancel) {\n let isIncomplete = false;\n // TODO: this should handle CompletionList.itemDefaults.\n // If there is a single responding plugin, pass through, otherwise need to apply the defaults to the completion items for the plugin.\n\n // Used to filter out duplicate labels (highest sortText wins).\n const itemsByLabel = new Map<string, CompletionItem>();\n\n await Promise.allSettled(\n plugins.map(async (plugin) => {\n const cur = await plugin.doComplete?.(doc, params, cancel);\n if (cancel.isCancellationRequested) return;\n if (cur) {\n let curItems!: CompletionItem[];\n if (Array.isArray(cur)) {\n curItems = cur;\n } else {\n curItems = cur.items;\n isIncomplete ||= cur.isIncomplete;\n }\n\n for (const item of curItems) {\n const { label } = item;\n const existingItem = itemsByLabel.get(label);\n if (existingItem) {\n if ((existingItem.sortText || label) < (item.sortText || label)) {\n itemsByLabel.set(label, item);\n }\n } else {\n itemsByLabel.set(label, item);\n }\n }\n }\n })\n );\n\n if (cancel.isCancellationRequested) return;\n\n if (itemsByLabel.size) {\n return { items: [...itemsByLabel.values()], isIncomplete };\n }\n },\n async doCompletionResolve(item, cancel) {\n for (const plugin of plugins) {\n try {\n const result = await plugin.doCompletionResolve?.(item, cancel);\n if (cancel.isCancellationRequested) return;\n if (result) return result;\n } catch {\n // ignore\n }\n }\n },\n async findDefinition(doc, params, cancel) {\n let result: (Location | DefinitionLink)[] | undefined;\n\n await Promise.allSettled(\n plugins.map(async (plugin) => {\n const cur = await plugin.findDefinition?.(doc, params, cancel);\n if (cancel.isCancellationRequested) return;\n if (cur) result = (result || []).concat(cur);\n })\n );\n\n if (cancel.isCancellationRequested) return;\n return result;\n },\n async findReferences(doc, params, cancel) {\n let result: Location[] | undefined;\n\n await Promise.allSettled(\n plugins.map(async (plugin) => {\n const cur = await plugin.findReferences?.(doc, params, cancel);\n if (cancel.isCancellationRequested) return;\n if (cur) result = (result || []).concat(cur);\n })\n );\n\n if (cancel.isCancellationRequested) return;\n return result;\n },\n async findDocumentSymbols(doc, params, cancel) {\n let result: SymbolInformation[] | undefined;\n\n await Promise.allSettled(\n plugins.map(async (plugin) => {\n const cur = await plugin.findDocumentSymbols?.(doc, params, cancel);\n if (cancel.isCancellationRequested) return;\n if (cur) result = (result || []).concat(cur);\n })\n );\n\n if (cancel.isCancellationRequested) return;\n return result;\n },\n async findDocumentLinks(doc, params, cancel) {\n let result: DocumentLink[] | undefined;\n\n await Promise.allSettled(\n plugins.map(async (plugin) => {\n const cur = await plugin.findDocumentLinks?.(doc, params, cancel);\n if (cancel.isCancellationRequested) return;\n if (cur) result = (result || []).concat(cur);\n })\n );\n\n if (cancel.isCancellationRequested) return;\n return result;\n },\n async findDocumentHighlights(doc, params, cancel) {\n let result: DocumentHighlight[] | undefined;\n\n await Promise.allSettled(\n plugins.map(async (plugin) => {\n const cur = await plugin.findDocumentHighlights?.(doc, params, cancel);\n if (cancel.isCancellationRequested) return;\n if (cur) result = (result || []).concat(cur);\n })\n );\n\n if (cancel.isCancellationRequested) return;\n return result;\n },\n async findDocumentColors(doc, params, cancel) {\n let result: ColorInformation[] | undefined;\n\n await Promise.allSettled(\n plugins.map(async (plugin) => {\n const cur = await plugin.findDocumentColors?.(doc, params, cancel);\n if (cancel.isCancellationRequested) return;\n if (cur) result = (result || []).concat(cur);\n })\n );\n\n if (cancel.isCancellationRequested) return;\n return result;\n },\n async getColorPresentations(doc, params, cancel) {\n let result: ColorPresentation[] | undefined;\n\n await Promise.allSettled(\n plugins.map(async (plugin) => {\n const cur = await plugin.getColorPresentations?.(doc, params, cancel);\n if (cancel.isCancellationRequested) return;\n if (cur) result = (result || []).concat(cur);\n })\n );\n\n if (cancel.isCancellationRequested) return;\n return result;\n },\n async doHover(doc, params, cancel) {\n let result: Hover | undefined;\n\n await Promise.allSettled(\n plugins.map(async (plugin) => {\n const cur = await plugin.doHover?.(doc, params, cancel);\n if (cancel.isCancellationRequested) return;\n if (cur) {\n if (result) {\n result.range = maxRange(result.range, cur.range);\n result.contents = mergeHoverContents(result.contents, cur.contents);\n } else {\n result = cur;\n }\n }\n })\n );\n\n return result;\n },\n async doRename(doc, params, cancel) {\n let changes: WorkspaceEdit[\"changes\"];\n let changeAnnotations: WorkspaceEdit[\"changeAnnotations\"];\n let documentChanges: WorkspaceEdit[\"documentChanges\"];\n\n await Promise.allSettled(\n plugins.map(async (plugin) => {\n const cur = await plugin.doRename?.(doc, params, cancel);\n if (cancel.isCancellationRequested) return;\n\n if (cur) {\n if (cur.changes) {\n if (changes) {\n changes = { ...changes };\n\n for (const uri in cur.changes) {\n changes[uri] = changes[uri]\n ? changes[uri].concat(cur.changes[uri])\n : cur.changes[uri];\n }\n } else {\n changes = cur.changes;\n }\n }\n\n if (cur.changeAnnotations) {\n changeAnnotations = changeAnnotations\n ? {\n ...changeAnnotations,\n ...cur.changeAnnotations,\n }\n : cur.changeAnnotations;\n }\n\n if (cur.documentChanges) {\n documentChanges = documentChanges\n ? documentChanges.concat(cur.documentChanges)\n : cur.documentChanges;\n }\n }\n })\n );\n\n if (cancel.isCancellationRequested) return;\n if (changes || changeAnnotations || documentChanges) {\n return {\n changes,\n changeAnnotations,\n documentChanges,\n };\n }\n },\n async doCodeActions(doc, params, cancel) {\n let result: (Command | CodeAction)[] | undefined;\n\n await Promise.allSettled(\n plugins.map(async (plugin) => {\n const cur = await plugin.doCodeActions?.(doc, params, cancel);\n if (cancel.isCancellationRequested) return;\n if (cur) result = (result || []).concat(cur);\n })\n );\n\n if (cancel.isCancellationRequested) return;\n return result;\n },\n async doValidate(doc) {\n let result: Diagnostic[] | undefined;\n\n await Promise.allSettled(\n plugins.map(async (plugin) => {\n const cur = await plugin.doValidate?.(doc);\n if (cur) result = (result || []).concat(cur);\n })\n );\n\n return result;\n },\n format: MarkoPlugin.format,\n};\n\nfunction maxRange(a: Range | undefined, b: Range | undefined) {\n if (!a) return b;\n if (!b) return a;\n return {\n start: {\n line: Math.min(a.start.line, b.start.line),\n character: Math.min(a.start.character, b.start.character),\n },\n end: {\n line: Math.max(a.end.line, b.end.line),\n character: Math.max(a.end.character, b.end.character),\n },\n };\n}\n\nfunction mergeHoverContents(a: Hover[\"contents\"], b: Hover[\"contents\"]) {\n if (!a) return b;\n if (!b) return a;\n\n if (!MarkupContent.is(a)) {\n a = markedStringToMarkupContent(a);\n }\n\n if (!MarkupContent.is(b)) {\n b = markedStringToMarkupContent(b);\n }\n\n if (a.kind === b.kind) {\n return {\n kind: a.kind,\n value: `${a.value}\\n${b.value}`,\n };\n }\n\n return {\n kind: MarkupKind.Markdown,\n value: `${markupContentToMarkdown(a)}\\n${markupContentToMarkdown(b)}`,\n };\n}\n\nfunction markedStringToMarkupContent(\n markedString: MarkedString | MarkedString[]\n): MarkupContent {\n return {\n kind: MarkupKind.Markdown,\n value: Array.isArray(markedString)\n ? markedString.map((it) => markedStringToString(it)).join(\"\\n\")\n : markedStringToString(markedString),\n };\n}\n\nfunction markedStringToString(markedString: MarkedString) {\n if (typeof markedString === \"string\") {\n return markedString;\n }\n\n return `\\`\\`\\`${markedString.language}\\n${markedString.value}\\n\\`\\`\\``;\n}\n\nfunction markupContentToMarkdown(content: MarkupContent): string {\n return content.kind === MarkupKind.Markdown\n ? content.value\n : escapeMarkdown(content.value);\n}\n\nfunction escapeMarkdown(str: string) {\n return str.replace(REG_MARKDOWN_CHARS, \"$1\");\n}\n\nexport { service as default };\n", "import type { CompletionItem, CompletionParams } from \"vscode-languageserver\";\nimport { NodeType } from \"@marko/language-tools\";\n\nimport { MarkoFile, getMarkoFile } from \"../../../utils/file\";\nimport type { Plugin, Result } from \"../../types\";\n\nimport { AttrName } from \"./AttrName\";\nimport { AttrValue } from \"./AttrValue\";\nimport { Import } from \"./Import\";\nimport { OpenTagName } from \"./OpenTagName\";\nimport { Tag } from \"./Tag\";\n\nexport type CompletionResult = Result<CompletionItem[]>;\nexport interface CompletionMeta<N = unknown> {\n file: MarkoFile;\n params: CompletionParams;\n offset: number;\n node: N;\n}\n\nconst handlers: Record<\n string,\n (data: CompletionMeta<any>) => CompletionResult\n> = {\n Tag,\n OpenTagName,\n AttrName,\n AttrValue,\n Import,\n};\n\nexport const doComplete: Plugin[\"doComplete\"] = async (doc, params) => {\n const file = getMarkoFile(doc);\n const offset = doc.offsetAt(params.position);\n const node = file.parsed.nodeAt(offset);\n return {\n items:\n (await handlers[NodeType[node.type]]?.({\n file,\n params,\n offset,\n node,\n })) || [],\n isIncomplete: true,\n };\n};\n", "import {\n type CompletionItem,\n CompletionItemKind,\n InsertTextFormat,\n type MarkupContent,\n MarkupKind,\n TextEdit,\n} from \"vscode-languageserver\";\n\nimport type { Node } from \"@marko/language-tools\";\n\nimport type { CompletionMeta, CompletionResult } from \".\";\n\nexport function AttrName({\n offset,\n node,\n file: {\n parsed,\n project: { lookup },\n },\n}: CompletionMeta<Node.AttrName>): CompletionResult {\n let name = parsed.read(node);\n const modifierIndex = name.indexOf(\":\");\n const hasModifier = modifierIndex !== -1;\n\n if (hasModifier) {\n if (offset >= node.start + modifierIndex) {\n return [\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 } else {\n name = name.slice(0, modifierIndex);\n }\n }\n\n const completions: CompletionItem[] = [];\n const attrNameLoc = parsed.locationAt(\n hasModifier\n ? {\n start: node.start,\n end: node.start + name.length,\n }\n : node\n );\n\n const tagName = node.parent.parent.nameText || \"\";\n const tagDef = tagName && lookup.getTag(tagName);\n const nestedTagAttrs: { [x: string]: boolean } = {};\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 lookup.forEachAttribute(tagName, (attr, parent) => {\n if (\n attr.deprecated ||\n nestedTagAttrs[attr.name] ||\n attr.name === \"*\" ||\n attr.type === \"never\" ||\n (attr.name[0] === \"_\" &&\n isExternalModule(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(attrNameLoc, snippet),\n });\n });\n\n return completions;\n}\n\nfunction isExternalModule(file: string) {\n return (\n /[/\\\\]node_modules[/\\\\]/.test(file) || !/^(?:[A-Za-z]:\\\\|[./\\\\])/.test(file)\n );\n}\n", "import path from \"path\";\n\nimport {\n CompletionItem,\n CompletionItemKind,\n TextEdit,\n} from \"vscode-languageserver\";\n\nimport type { Node } from \"@marko/language-tools\";\nimport isDocumentLinkAttr from \"../util/is-document-link-attr\";\nimport fileSystem, { FileType } from \"../../../utils/file-system\";\nimport resolveUrl from \"../../../utils/resolve-url\";\n\nimport type { CompletionMeta } from \".\";\n\nexport async function AttrValue({\n offset,\n node,\n file: { uri, parsed, code },\n}: CompletionMeta<Node.AttrValue>): Promise<void | CompletionItem[]> {\n const attr = node.parent;\n if (isDocumentLinkAttr(code, attr.parent, attr)) {\n const start = node.value.start + 1;\n if (code[start] !== \".\") return; // only resolve relative paths\n\n const end = node.value.end - 1;\n const relativeOffset = offset - start;\n const rawValue = parsed.read({\n start,\n end,\n });\n\n const segmentStart = rawValue.lastIndexOf(\"/\", relativeOffset);\n if (segmentStart === -1) return; // only resolve after a slash.\n\n const req = rawValue.slice(0, segmentStart);\n const resolved = resolveUrl(req, uri);\n\n if (resolved) {\n const result: CompletionItem[] = [];\n const curFile = req === \".\" ? path.basename(uri) : undefined;\n const replaceRange = parsed.locationAt({\n start: start + segmentStart + 1,\n end: start + rawValue.length,\n });\n\n for (const [entry, type] of await fileSystem.readDirectory(resolved)) {\n if (entry[0] !== \".\" && entry !== curFile) {\n result.push(\n type === FileType.Directory\n ? {\n label: `${entry}/`,\n kind: CompletionItemKind.Folder,\n textEdit: TextEdit.replace(replaceRange, `${entry}/`),\n command: {\n title: \"Suggest\",\n command: \"editor.action.triggerSuggest\",\n },\n }\n : {\n label: entry,\n kind: CompletionItemKind.File,\n textEdit: TextEdit.replace(replaceRange, entry),\n }\n );\n }\n }\n\n return result;\n }\n }\n}\n", "import { type Node, NodeType } from \"@marko/language-tools\";\n\nconst linkedAttrs: Map<string, Set<string>> = new Map([\n [\n \"src\",\n new Set([\n \"audio\",\n \"embed\",\n \"iframe\",\n \"img\",\n \"input\",\n \"script\",\n \"source\",\n \"track\",\n \"video\",\n ]),\n ],\n [\"href\", new Set([\"a\", \"area\", \"link\"])],\n [\"data\", new Set([\"object\"])],\n [\"poster\", new Set([\"video\"])],\n]);\n\nexport default function isDocumentLinkAttr(\n code: string,\n tag: Node.ParentTag,\n attr: Node.AttrNode\n): attr is Node.AttrNamed & { value: Node.AttrValue } {\n return (\n (tag.nameText &&\n attr.type === NodeType.AttrNamed &&\n attr.value?.type === NodeType.AttrValue &&\n /^['\"]$/.test(code[attr.value.value.start]) &&\n linkedAttrs\n .get(code.slice(attr.name.start, attr.name.end))\n ?.has(tag.nameText)) ||\n false\n );\n}\n", "import fs from \"fs/promises\";\nimport { fileURLToPath } from \"url\";\n\nimport { type FileStat, FileType } from \"vscode-css-languageservice\";\n\nexport { FileStat, FileType };\nexport default {\n stat,\n readDirectory,\n};\n\nasync function stat(uri: string): Promise<FileStat> {\n let type = FileType.Unknown;\n let ctime = -1;\n let mtime = -1;\n let size = -1;\n\n try {\n const stat = await fs.stat(fileURLToPath(uri));\n if (stat.isDirectory()) type = FileType.Directory;\n else if (stat.isFile()) type = FileType.File;\n ctime = stat.ctimeMs;\n mtime = stat.mtimeMs;\n size = stat.size;\n } catch {\n // ignore\n }\n\n return {\n type,\n ctime,\n mtime,\n size,\n };\n}\n\nasync function readDirectory(uri: string): Promise<[string, FileType][]> {\n const result: [string, FileType][] = [];\n\n try {\n for await (const entry of await fs.opendir(fileURLToPath(uri))) {\n if (entry.isFile()) {\n result.push([entry.name, FileType.File]);\n } else if (entry.isDirectory()) {\n result.push([entry.name, FileType.Directory]);\n }\n }\n } catch {\n // ignore\n }\n return result;\n}\n", "export default function resolveUrl(to: string, base: string) {\n try {\n const url = new URL(to, base);\n if (url.protocol === \"file:\") return url.toString();\n } catch {\n return undefined;\n }\n}\n", "import { CompletionItem, TextEdit } from \"vscode-languageserver\";\nimport type { Node } from \"@marko/language-tools\";\n\nimport getTagNameCompletion from \"../util/get-tag-name-completion\";\n\nimport type { CompletionMeta, CompletionResult } from \".\";\n\nconst importTagReg = /(['\"])<((?:[^\\1\\\\>]+|\\\\.)*)>?\\1/;\n\nexport function Import({\n node,\n file: {\n parsed,\n filename,\n project: { lookup },\n },\n}: CompletionMeta<Node.Import>): CompletionResult {\n // check for import statement\n const value = parsed.read(node);\n const match = importTagReg.exec(value);\n if (match) {\n const [{ length }] = match;\n const fromStart = node.start + match.index;\n const range = parsed.locationAt({\n start: fromStart + 1,\n end: fromStart + length - 1,\n });\n\n const result: CompletionItem[] = [];\n\n for (const tag of lookup.getTagsSorted()) {\n if (\n (tag.template || tag.renderer) &&\n !(\n tag.html ||\n tag.parser ||\n tag.translator ||\n tag.isNestedTag ||\n tag.name === \"*\" ||\n tag.parseOptions?.statement ||\n /^@?marko[/-]/.test(tag.taglibId) ||\n (tag.name[0] === \"_\" && /[\\\\/]node_modules[\\\\/]/.test(tag.filePath))\n )\n ) {\n const completion = getTagNameCompletion({\n tag,\n importer: filename,\n });\n\n completion.label = `<${completion.label}>`;\n completion.textEdit = TextEdit.replace(range, completion.label);\n result.push(completion);\n }\n }\n\n return result;\n }\n}\n", "import path from \"path\";\n\nimport type { TagDefinition } from \"@marko/babel-utils\";\nimport {\n type CompletionItem,\n CompletionItemKind,\n CompletionItemTag,\n InsertTextFormat,\n MarkupKind,\n type Range,\n TextEdit,\n} from \"vscode-languageserver\";\nimport { URI } from \"vscode-uri\";\n\nconst deprecated = [CompletionItemTag.Deprecated] as CompletionItemTag[];\n\nexport default function getTagNameCompletion({\n tag,\n range,\n showAutoComplete,\n importer,\n}: {\n tag: TagDefinition;\n range?: Range;\n importer?: string;\n showAutoComplete?: true;\n}): CompletionItem {\n let label = tag.isNestedTag ? `@${tag.name}` : tag.name;\n const fileForTag = tag.template || tag.renderer || tag.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 =\n /^@?marko[/-]/.test(tag.taglibId || tag.filePath) ||\n nodeModuleName === \"marko\";\n const documentation = {\n kind: MarkupKind.Markdown,\n value: tag.html\n ? `Built in [&lt;${tag.name}&gt;](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/${tag.name}) HTML tag.`\n : isCoreTag\n ? `Core Marko &lt;${tag.name}&gt; tag.`\n : nodeModuleName\n ? `Custom Marko tag discovered from the [\"${nodeModuleName}\"](${fileURIForTag}) npm package.`\n : `Custom Marko tag discovered from:\\n\\n[${\n importer ? path.relative(importer, fileForTag) : fileForTag\n }](${fileURIForTag})`,\n };\n\n if (tag.description) {\n documentation.value += `\\n\\n${tag.description}`;\n }\n\n const autocomplete = showAutoComplete ? tag.autocomplete?.[0] : undefined;\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 tags: tag.deprecated ? deprecated : undefined,\n insertTextFormat: autocomplete ? InsertTextFormat.Snippet : undefined,\n kind: tag.html ? CompletionItemKind.Property : CompletionItemKind.Class,\n textEdit: range && TextEdit.replace(range, autocomplete?.snippet || label),\n };\n}\n", "import type { CompletionItem } from \"vscode-languageserver\";\nimport { type Node, NodeType } from \"@marko/language-tools\";\n\nimport getTagNameCompletion from \"../util/get-tag-name-completion\";\n\nimport type { CompletionMeta, CompletionResult } from \".\";\n\nexport function OpenTagName({\n node,\n file: {\n parsed,\n filename,\n project: { lookup },\n },\n}: CompletionMeta<Node.OpenTagName>): CompletionResult {\n const tag = node.parent;\n const range = parsed.locationAt(node);\n const isAttrTag = tag.type === NodeType.AttrTag;\n const result: CompletionItem[] = [];\n\n if (isAttrTag) {\n let parentTag = tag.owner;\n while (parentTag?.type === NodeType.AttrTag) parentTag = parentTag.owner;\n const parentTagDef =\n parentTag && parentTag.nameText && lookup.getTag(parentTag.nameText);\n\n if (parentTagDef) {\n const { nestedTags } = parentTagDef;\n for (const key in nestedTags) {\n if (key !== \"*\") {\n const tag = nestedTags[key];\n result.push(\n getTagNameCompletion({\n tag,\n range,\n importer: filename,\n showAutoComplete: true,\n })\n );\n }\n }\n }\n } else {\n const skipStatements = !(\n tag.concise && tag.parent.type === NodeType.Program\n );\n for (const tag of lookup.getTagsSorted()) {\n if (\n !(\n tag.name === \"*\" ||\n tag.isNestedTag ||\n (skipStatements && tag.parseOptions?.statement) ||\n (tag.name[0] === \"_\" &&\n /^@?marko[/-]|[\\\\/]node_modules[\\\\/]/.test(tag.filePath))\n )\n ) {\n const completion = getTagNameCompletion({\n tag,\n range,\n importer: filename,\n showAutoComplete: true,\n });\n completion.sortText = `0${completion.label}`; // Ensure higher priority than typescript.\n result.push(completion);\n }\n }\n }\n\n return result;\n}\n", "import {\n CompletionItemKind,\n InsertTextFormat,\n TextEdit,\n} from \"vscode-languageserver\";\n\nimport { type Node, UNFINISHED } from \"@marko/language-tools\";\n\nimport type { CompletionMeta, CompletionResult } from \".\";\n\nconst partialCloseTagReg = /<\\/(?:[^><]*>)?/iy;\n\n/**\n * Provide completion for the closing tag.\n */\nexport function Tag({\n node,\n offset,\n file: { parsed, code },\n}: CompletionMeta<Node.Tag>): CompletionResult {\n const isClosed = node.end !== UNFINISHED;\n if (isClosed || node.concise) return;\n\n const closingTagStr = `</${node.nameText || \"\"}>`;\n\n if (offset === node.open.end) {\n // We're at the end of the open tag and the closing tag was not found.\n return [\n {\n label: closingTagStr,\n kind: CompletionItemKind.Class,\n insertTextFormat: InsertTextFormat.Snippet,\n insertText: `\\n\\t$0\\n${closingTagStr}`,\n },\n ];\n } else if (node.close && offset >= node.close.start) {\n // We have an unfinished closing tag.\n const start = node.close.start;\n partialCloseTagReg.lastIndex = start;\n const [{ length }] = partialCloseTagReg.exec(code)!;\n const end = start + length;\n\n return [\n {\n label: closingTagStr,\n kind: CompletionItemKind.Class,\n insertTextFormat: InsertTextFormat.Snippet,\n textEdit: TextEdit.replace(\n parsed.locationAt({\n start,\n end,\n }),\n closingTagStr\n ),\n },\n ];\n }\n}\n", "import path from \"path\";\nimport { Diagnostic, DiagnosticSeverity } from \"vscode-languageserver\";\n\nimport { getMarkoProject } from \"../../utils/project\";\nimport { getFSPath } from \"../../utils/file\";\nimport type { Plugin } from \"../types\";\n\nconst markoErrorRegExp =\n /^(.+?)\\.marko(?:\\((\\d+)(?:\\s*,\\s*(\\d+))?\\))?: (.*)$/gm;\n\nexport const doValidate: Plugin[\"doValidate\"] = (doc) => {\n const filename = getFSPath(doc);\n const diagnostics: Diagnostic[] = [];\n\n const { compiler, translator, cache } = getMarkoProject(\n filename && path.dirname(filename)\n );\n\n try {\n compiler.compileSync(doc.getText(), filename || \"untitled.marko\", {\n cache,\n translator,\n code: false,\n output: \"source\",\n sourceMaps: false,\n babelConfig: {\n caller: {\n name: \"@marko/language-server\",\n supportsStaticESM: true,\n supportsDynamicImport: true,\n supportsTopLevelAwait: true,\n supportsExportNamespaceFrom: true,\n },\n },\n });\n } catch (e) {\n let match: RegExpExecArray | null;\n while ((match = markoErrorRegExp.exec((e as Error).message))) {\n const [, , rawLine, rawCol, message] = match;\n const pos = {\n line: (parseInt(rawLine, 10) || 1) - 1,\n character: (parseInt(rawCol, 10) || 1) - 1,\n };\n diagnostics.push({\n range: { start: pos, end: pos },\n source: \"marko\",\n code: undefined,\n tags: undefined,\n severity: DiagnosticSeverity.Error,\n message,\n });\n }\n }\n\n return diagnostics;\n};\n", "import type { Hover, HoverParams } from \"vscode-languageserver\";\nimport { NodeType } from \"@marko/language-tools\";\n\nimport { MarkoFile, getMarkoFile } from \"../../../utils/file\";\nimport type { Plugin, Result } from \"../../types\";\n\nimport { OpenTagName } from \"./OpenTagName\";\n\nexport type HoverResult = Result<Hover>;\nexport interface HoverMeta<N = unknown> {\n file: MarkoFile;\n params: HoverParams;\n offset: number;\n node: N;\n}\n\nconst handlers: Record<string, (data: HoverMeta<any>) => HoverResult> = {\n OpenTagName,\n};\n\nexport const doHover: Plugin[\"doHover\"] = async (doc, params) => {\n const file = getMarkoFile(doc);\n const offset = doc.offsetAt(params.position);\n const node = file.parsed.nodeAt(offset);\n return await handlers[NodeType[node.type]]?.({\n file,\n params,\n offset,\n node,\n });\n};\n", "import type { Location, Position } from \"htmljs-parser\";\n\nexport const START_POSITION: Position = {\n line: 0,\n character: 0,\n};\n\nexport const START_LOCATION: Location = {\n start: START_POSITION,\n end: START_POSITION,\n};\n", "import type { Node } from \"@marko/language-tools\";\n\nimport getTagNameCompletion from \"../util/get-tag-name-completion\";\nimport { START_LOCATION } from \"../../../utils/constants\";\n\nimport type { HoverMeta, HoverResult } from \".\";\n\nexport function OpenTagName({\n node,\n file: {\n parsed,\n filename,\n project: { lookup },\n },\n}: HoverMeta<Node.OpenTagName>): HoverResult {\n const tag = node.parent;\n const range = parsed.locationAt(node);\n const tagDef = tag.nameText && lookup.getTag(tag.nameText);\n\n if (tagDef) {\n const completion = getTagNameCompletion({\n tag: tagDef,\n range: START_LOCATION,\n importer: filename,\n });\n\n if (completion.documentation) {\n return {\n range,\n contents: completion.documentation,\n };\n }\n }\n}\n", "import type { DefinitionLink, DefinitionParams } from \"vscode-languageserver\";\nimport { NodeType } from \"@marko/language-tools\";\n\nimport { MarkoFile, getMarkoFile } from \"../../../utils/file\";\nimport type { Plugin, Result } from \"../../types\";\n\nimport { AttrName } from \"./AttrName\";\nimport { OpenTagName } from \"./OpenTagName\";\n\nexport type DefinitionResult = Result<DefinitionLink[]>;\nexport interface DefinitionMeta<N = unknown> {\n file: MarkoFile;\n params: DefinitionParams;\n offset: number;\n node: N;\n}\n\nconst handlers: Record<\n string,\n (data: DefinitionMeta<any>) => DefinitionResult\n> = {\n OpenTagName,\n AttrName,\n};\n\nexport const findDefinition: Plugin[\"findDefinition\"] = async (doc, params) => {\n const file = getMarkoFile(doc);\n const offset = doc.offsetAt(params.position);\n const node = file.parsed.nodeAt(offset);\n return (\n (await handlers[NodeType[node.type]]?.({\n file,\n params,\n offset,\n node,\n })) || []\n );\n};\n", "import fs from \"fs\";\nimport { URI } from \"vscode-uri\";\nimport { type Node, getLines, getLocation } from \"@marko/language-tools\";\n\nimport RegExpBuilder from \"../../../utils/regexp-builder\";\nimport { START_LOCATION } from \"../../../utils/constants\";\n\nimport type { DefinitionMeta, DefinitionResult } from \".\";\n\nexport function AttrName({\n node,\n file: {\n parsed,\n project: { lookup },\n },\n}: DefinitionMeta<Node.AttrName>): DefinitionResult {\n const tagName = node.parent.parent.nameText;\n const attrName = parsed.read(node);\n const tagDef = tagName ? lookup.getTag(tagName) : undefined;\n const attrDef = lookup.getAttribute(tagName || \"\", attrName);\n let range = START_LOCATION;\n\n if (!attrDef) {\n return;\n }\n\n const attrEntryFile = attrDef.filePath || tagDef?.filePath;\n if (!attrEntryFile) {\n return;\n }\n\n if (/\\.json$/.test(attrEntryFile)) {\n const tagDefSource = fs.readFileSync(attrEntryFile, \"utf-8\");\n const match = RegExpBuilder`/\"@${attrName}\"\\s*:\\s*[^\\r\\n,]+/g`.exec(\n tagDefSource\n );\n\n if (match && match.index) {\n range = getLocation(\n getLines(tagDefSource),\n match.index,\n match.index + match[0].length\n );\n }\n\n return [\n {\n targetUri: URI.file(attrEntryFile).toString(),\n targetRange: range,\n targetSelectionRange: range,\n originSelectionRange: parsed.locationAt(node),\n },\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 fs from \"fs\";\nimport path from \"path\";\n\nimport { URI } from \"vscode-uri\";\nimport type { TagDefinition } from \"@marko/babel-utils\";\nimport {\n type Node,\n NodeType,\n getLines,\n getLocation,\n} from \"@marko/language-tools\";\n\nimport RegExpBuilder from \"../../../utils/regexp-builder\";\nimport { START_LOCATION } from \"../../../utils/constants\";\n\nimport type { DefinitionMeta, DefinitionResult } from \".\";\n\nexport function OpenTagName({\n node,\n file: {\n parsed,\n project: { lookup },\n },\n}: DefinitionMeta<Node.OpenTagName>): DefinitionResult {\n const tag = node.parent;\n let tagDef: TagDefinition | null | undefined;\n let range = START_LOCATION;\n\n if (tag.type === NodeType.AttrTag) {\n let parentTag = tag.owner;\n while (parentTag?.type === NodeType.AttrTag) parentTag = parentTag.owner;\n tagDef =\n parentTag && parentTag.nameText\n ? lookup.getTag(parentTag.nameText)\n : undefined;\n } else {\n tagDef = tag.nameText ? lookup.getTag(tag.nameText) : undefined;\n }\n\n if (!tagDef) {\n return;\n }\n\n const tagEntryFile = tagDef.template || tagDef.renderer || tagDef.filePath;\n\n if (!path.isAbsolute(tagEntryFile)) {\n return;\n }\n\n if (/\\/marko(?:-tag)?\\.json$/.test(tagEntryFile)) {\n const tagDefSource = fs.readFileSync(tagEntryFile, \"utf-8\");\n const match =\n RegExpBuilder`/\"(?:<${tag.nameText}>|${tag.nameText})\"\\s*:\\s*[^\\r\\n,]+/g`.exec(\n tagDefSource\n );\n\n if (match && match.index) {\n range = getLocation(\n getLines(tagDefSource),\n match.index,\n match.index + match[0].length\n );\n }\n }\n\n return [\n {\n targetUri: URI.file(tagEntryFile).toString(),\n targetRange: range,\n targetSelectionRange: range,\n originSelectionRange: parsed.locationAt(node),\n },\n ];\n}\n", "import type { DocumentLink } from \"vscode-languageserver\";\nimport { type Node, NodeType } from \"@marko/language-tools\";\nimport { MarkoFile, processDoc } from \"../../utils/file\";\n\nimport resolveUrl from \"../../utils/resolve-url\";\nimport type { Plugin } from \"../types\";\n\nimport isDocumentLinkAttr from \"./util/is-document-link-attr\";\n\nconst importTagReg = /(['\"])<((?:[^\\1\\\\>]+|\\\\.)*)>?\\1/g;\n\nexport const findDocumentLinks: Plugin[\"findDocumentLinks\"] = async (doc) => {\n return processDoc(doc, extractDocumentLinks);\n};\n\n/**\n * Iterate over the Marko CST and extract all the file links in the document.\n */\nfunction extractDocumentLinks({\n uri,\n scheme,\n parsed,\n code,\n project: { lookup },\n}: MarkoFile): DocumentLink[] {\n if (scheme !== \"file\") {\n return [];\n }\n\n const links: DocumentLink[] = [];\n const { program, read } = parsed;\n const visit = (node: Node.ChildNode) => {\n switch (node.type) {\n case NodeType.AttrTag:\n if (node.body) {\n for (const child of node.body) {\n visit(child);\n }\n }\n break;\n case NodeType.Tag:\n if (node.attrs && node.nameText) {\n for (const attr of node.attrs) {\n if (isDocumentLinkAttr(code, node, attr)) {\n const resolved = resolveUrl(\n read(attr.value.value).slice(1, -1),\n uri\n );\n if (resolved) {\n links.push({\n range: parsed.locationAt(attr.value.value),\n target: resolveUrl(read(attr.value.value).slice(1, -1), uri),\n });\n }\n }\n }\n }\n if (node.body) {\n for (const child of node.body) {\n visit(child);\n }\n }\n\n break;\n }\n };\n\n for (const node of program.static) {\n // check for import statement (this currently only support the tag import shorthand).\n if (node.type === NodeType.Import) {\n importTagReg.lastIndex = 0;\n const value = parsed.read(node);\n const match = importTagReg.exec(value);\n if (match) {\n const [{ length }, , tagName] = match;\n const tagDef = lookup.getTag(tagName);\n const fileForTag = tagDef && (tagDef.template || tagDef.renderer);\n\n if (fileForTag) {\n links.push({\n range: parsed.locationAt({\n start: node.start + match.index,\n end: node.start + match.index + length,\n }),\n target: fileForTag,\n });\n }\n }\n }\n }\n\n for (const node of program.body) {\n visit(node);\n }\n\n return links;\n}\n", "import { SymbolInformation, SymbolKind } from \"vscode-languageserver\";\nimport { type Node, NodeType } from \"@marko/language-tools\";\nimport type { Plugin } from \"../types\";\nimport { MarkoFile, processDoc } from \"../../utils/file\";\n\nexport const findDocumentSymbols: Plugin[\"findDocumentSymbols\"] = async (doc) =>\n processDoc(doc, extractDocumentSymbols);\n\n/**\n * Iterate over the Marko CST and extract all the symbols (mostly tags) in the document.\n */\nfunction extractDocumentSymbols({\n uri,\n scheme,\n parsed,\n project: { lookup },\n}: MarkoFile): SymbolInformation[] {\n if (scheme !== \"file\") {\n return [];\n }\n\n const symbols: SymbolInformation[] = [];\n const { program } = parsed;\n const visit = (node: Node.ChildNode) => {\n switch (node.type) {\n case NodeType.Tag:\n case NodeType.AttrTag:\n symbols.push({\n name:\n (node.type === NodeType.AttrTag\n ? node.nameText?.slice(node.nameText.indexOf(\"@\"))\n : node.nameText) || \"<${...}>\",\n kind:\n (node.nameText &&\n lookup.getTag(node.nameText)?.html &&\n SymbolKind.Property) ||\n SymbolKind.Class,\n location: {\n uri,\n range: parsed.locationAt(node),\n },\n });\n\n if (node.body) {\n for (const child of node.body) {\n visit(child);\n }\n }\n\n break;\n }\n };\n\n for (const item of program.body) {\n visit(item);\n }\n\n return symbols;\n}\n", "import { TextEdit } from \"vscode-languageserver\";\nimport * as prettier from \"prettier\";\nimport * as markoPrettier from \"prettier-plugin-marko\";\n\nimport { START_POSITION } from \"../../utils/constants\";\nimport { displayError } from \"../../utils/messages\";\nimport { getFSPath } from \"../../utils/file\";\nimport type { Plugin } from \"../types\";\n\nexport const format: Plugin[\"format\"] = async (doc, params, cancel) => {\n try {\n const filepath = getFSPath(doc);\n const text = doc.getText();\n const options: prettier.Options = {\n parser: \"marko\",\n filepath,\n plugins: [markoPrettier],\n tabWidth: params.options.tabSize,\n useTabs: params.options.insertSpaces === false,\n ...(filepath\n ? await prettier\n .resolveConfig(filepath, {\n editorconfig: true,\n })\n .catch(() => null)\n : null),\n };\n\n if (cancel.isCancellationRequested) return;\n\n // TODO: format selection\n const ret = [\n TextEdit.replace(\n {\n start: START_POSITION,\n end: doc.positionAt(text.length),\n },\n prettier.format(text, options)\n ),\n ];\n return ret;\n } catch (e) {\n displayError(e);\n }\n};\n", "import type { Plugin } from \"../types\";\n\nimport { doComplete } from \"./complete\";\nimport { doValidate } from \"./validate\";\nimport { doHover } from \"./hover\";\nimport { findDefinition } from \"./definition\";\nimport { findDocumentLinks } from \"./document-links\";\nimport { findDocumentSymbols } from \"./document-symbols\";\nimport { format } from \"./format\";\n\nexport default {\n doComplete,\n doValidate,\n doHover,\n findDefinition,\n findDocumentLinks,\n findDocumentSymbols,\n format,\n} as Plugin;\n", "import path from \"path\";\n\nimport { relativeImportPath } from \"relative-import-path\";\nimport ts from \"typescript/lib/tsserverlibrary\";\nimport {\n CompletionItem,\n CompletionItemKind,\n CompletionItemTag,\n DefinitionLink,\n Diagnostic,\n DiagnosticSeverity,\n DiagnosticTag,\n InsertTextFormat,\n TextEdit,\n} from \"vscode-languageserver\";\nimport type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport { URI } from \"vscode-uri\";\nimport * as prettier from \"prettier\";\n\nimport {\n type Extracted,\n ScriptLang,\n extractScript,\n} from \"@marko/language-tools\";\nimport { type MarkoProject, getMarkoProject } from \"../../utils/project\";\nimport { getFSPath, processDoc } from \"../../utils/file\";\nimport * as documents from \"../../utils/text-documents\";\nimport * as workspace from \"../../utils/workspace\";\nimport { START_LOCATION } from \"../../utils/constants\";\nimport type { Plugin } from \"../types\";\n\nimport { ExtractedSnapshot, patch } from \"../../ts-plugin/host\";\nimport getComponentFilename from \"../../utils/get-component-filename\";\nimport getProjectTypeLibs from \"../../utils/get-runtime-types\";\nimport getScriptLang from \"../../utils/get-script-lang\";\n\n// Filter out some syntax errors from the TS compiler which will be surfaced from the marko compiler.\nconst IGNORE_DIAG_REG = /^(?:Expression|Identifier|['\"][^\\w]['\"]) expected.$/;\n\ninterface TSProject {\n rootDir: string;\n host: ts.LanguageServiceHost;\n service: ts.LanguageService;\n markoProject: MarkoProject;\n markoScriptLang: ScriptLang;\n markoProjectTypeLibs: ReturnType<typeof getProjectTypeLibs>;\n}\n\nconst extractCache = new Map<string, ExtractedSnapshot>();\nconst snapshotCache = new Map<string, ts.IScriptSnapshot>();\nconst markoFileReg = /\\.marko$/;\nconst tsTriggerChars = new Set([\".\", '\"', \"'\", \"`\", \"/\", \"@\", \"<\", \"#\", \" \"]);\nconst optionalModifierReg = /\\boptional\\b/;\nconst deprecatedModifierReg = /\\bdeprecated\\b/;\nconst colorModifierReg = /\\bcolor\\b/;\nconst localInternalsPrefix = \"__marko_internal_\";\n\nconst ScriptService: Partial<Plugin> = {\n commands: {\n \"$/showScriptOutput\": async (uri: string) => {\n const doc = documents.get(uri);\n if (doc?.languageId !== \"marko\") return;\n const filename = getFSPath(doc);\n if (!filename) return;\n const project = getTSProject(filename);\n const extracted = processScript(doc, project);\n const lang = getScriptLang(\n filename,\n ts,\n project.host,\n project.markoScriptLang\n );\n const generated = extracted.toString();\n const content = (() => {\n try {\n return prettier.format(generated, {\n parser: lang === ScriptLang.ts ? \"typescript\" : \"babel\",\n });\n } catch {\n return generated;\n }\n })();\n return {\n language: lang === ScriptLang.ts ? \"typescript\" : \"javascript\",\n content,\n };\n },\n },\n async initialize() {\n workspace.onConfigChange(() => {\n snapshotCache.clear();\n });\n\n documents.onFileChange((doc) => {\n if (doc) {\n const filename = getFSPath(doc)!;\n extractCache.delete(filename);\n snapshotCache.delete(filename);\n } else {\n extractCache.clear();\n snapshotCache.clear();\n }\n });\n },\n async doComplete(doc, params) {\n const fileName = getFSPath(doc);\n if (!fileName) return;\n\n const project = getTSProject(fileName);\n const extracted = processScript(doc, project);\n const sourceOffset = doc.offsetAt(params.position);\n const generatedOffset = extracted.generatedOffsetAt(sourceOffset);\n if (generatedOffset === undefined) return;\n\n const completions = project.service.getCompletionsAtPosition(\n fileName,\n generatedOffset,\n {\n ...(await getPreferences(project.markoScriptLang)),\n ...params.context,\n triggerCharacter: getTSTriggerChar(params.context?.triggerCharacter),\n }\n );\n if (!completions?.entries.length) return;\n\n const result: CompletionItem[] = [];\n\n for (const completion of completions.entries) {\n let { name: label, insertText, sortText } = completion;\n if (label.startsWith(localInternalsPrefix)) continue;\n\n const { replacementSpan } = completion;\n let textEdit: CompletionItem[\"textEdit\"];\n let detail: CompletionItem[\"detail\"];\n let kind: CompletionItem[\"kind\"];\n let tags: CompletionItem[\"tags\"];\n let labelDetails: CompletionItem[\"labelDetails\"];\n let source = completion.source;\n\n if (source && completion.hasAction) {\n if (source[0] === \".\") {\n source = path.resolve(fileName, \"..\", source);\n }\n detail = relativeImportPath(fileName, source);\n // De-prioritize auto-imported completions.\n sortText = `\\uffff${sortText}`;\n } else if (completion.sourceDisplay) {\n const description = ts.displayPartsToString(completion.sourceDisplay);\n if (description !== label) {\n labelDetails = { description };\n }\n }\n\n if (completion.kindModifiers) {\n if (optionalModifierReg.test(completion.kindModifiers)) {\n insertText = label;\n label += \"?\";\n }\n\n if (deprecatedModifierReg.test(completion.kindModifiers)) {\n tags = [CompletionItemTag.Deprecated];\n }\n\n if (colorModifierReg.test(completion.kindModifiers)) {\n kind = CompletionItemKind.Color;\n }\n }\n\n if (replacementSpan) {\n const sourceRange = sourceLocationAtTextSpan(\n extracted,\n replacementSpan\n );\n\n if (sourceRange) {\n textEdit = {\n range: sourceRange,\n newText: insertText || label,\n };\n } else {\n continue;\n }\n }\n\n result.push({\n tags,\n label,\n detail,\n textEdit,\n sortText,\n insertText,\n labelDetails,\n filterText: insertText,\n preselect: completion.isRecommended || undefined,\n kind: kind || convertCompletionItemKind(completion.kind),\n insertTextFormat: completion.isSnippet\n ? InsertTextFormat.Snippet\n : undefined,\n data: completion.data && {\n originalData: completion.data,\n originalName: completion.name,\n originalSource: source,\n generatedOffset,\n fileName,\n },\n });\n }\n\n return {\n isIncomplete: true,\n items: result,\n };\n },\n async doCompletionResolve(item) {\n const { data } = item;\n if (!data) return;\n const { fileName } = data;\n if (!fileName) return;\n const doc = documents.get(filenameToURI(fileName));\n if (!doc) return;\n\n const project = getTSProject(fileName);\n const detail = project.service.getCompletionEntryDetails(\n fileName,\n data.generatedOffset,\n data.originalName,\n {},\n data.originalSource,\n await getPreferences(project.markoScriptLang),\n data.originalData\n );\n\n if (!detail?.codeActions) return;\n\n const extracted = processScript(doc, project);\n const textEdits: CompletionItem[\"additionalTextEdits\"] =\n (item.additionalTextEdits = item.additionalTextEdits || []);\n\n for (const action of detail.codeActions) {\n for (const change of action.changes) {\n if (change.fileName !== fileName) continue;\n for (const { span, newText } of change.textChanges) {\n const sourceRange = /^\\s*(?:import|export) /.test(newText)\n ? // Ensure import inserts are always in the program root.\n // TODO: this could probably be updated to more closely reflect\n // where typescript wants to put the import/export.\n START_LOCATION\n : sourceLocationAtTextSpan(extracted, span);\n if (sourceRange) {\n textEdits.push({\n newText,\n range: sourceRange,\n });\n }\n }\n }\n }\n\n return item;\n },\n findDefinition(doc, params) {\n const fileName = getFSPath(doc);\n if (!fileName) return;\n\n const project = getTSProject(fileName);\n const extracted = processScript(doc, project);\n const sourceOffset = doc.offsetAt(params.position);\n const generatedOffset = extracted.generatedOffsetAt(sourceOffset);\n if (generatedOffset === undefined) return;\n\n const boundary = project.service.getDefinitionAndBoundSpan(\n fileName,\n generatedOffset\n );\n if (!boundary?.definitions) return;\n\n const originSelectionRange = sourceLocationAtTextSpan(\n extracted,\n boundary.textSpan\n );\n let result: DefinitionLink[] | DefinitionLink | undefined;\n\n for (const def of boundary.definitions) {\n const targetUri = filenameToURI(def.fileName);\n const defDoc = documents.get(targetUri);\n if (!defDoc) continue;\n\n let link: DefinitionLink | undefined;\n\n if (markoFileReg.test(targetUri)) {\n const extracted = processScript(defDoc, project);\n const targetSelectionRange =\n sourceLocationAtTextSpan(extracted, def.textSpan) || START_LOCATION;\n const targetRange =\n (def.contextSpan &&\n sourceLocationAtTextSpan(extracted, def.contextSpan)) ||\n START_LOCATION;\n link = {\n targetUri,\n targetRange,\n targetSelectionRange,\n originSelectionRange,\n };\n } else {\n link = {\n targetUri,\n targetRange: def.contextSpan\n ? docLocationAtTextSpan(defDoc, def.contextSpan)\n : START_LOCATION,\n targetSelectionRange: docLocationAtTextSpan(defDoc, def.textSpan),\n originSelectionRange,\n };\n }\n\n if (link) {\n if (result) {\n if (Array.isArray(result)) {\n result.push(link);\n } else {\n result = [result, link];\n }\n } else {\n result = link;\n }\n }\n }\n\n return result;\n },\n doHover(doc, params) {\n const fileName = getFSPath(doc);\n if (!fileName) return;\n\n const project = getTSProject(fileName);\n const extracted = processScript(doc, project);\n const sourceOffset = doc.offsetAt(params.position);\n const generatedOffset = extracted.generatedOffsetAt(sourceOffset);\n if (generatedOffset === undefined) return;\n\n const quickInfo = project.service.getQuickInfoAtPosition(\n fileName,\n generatedOffset\n );\n if (!quickInfo) return;\n\n const sourceRange = sourceLocationAtTextSpan(extracted, quickInfo.textSpan);\n if (!sourceRange) return;\n\n let contents = \"\";\n\n const displayParts = ts.displayPartsToString(quickInfo.displayParts);\n if (displayParts) {\n contents += `\\`\\`\\`typescript\\n${displayParts}\\n\\`\\`\\``;\n }\n\n const documentation = printDocumentation(\n quickInfo.documentation,\n quickInfo.tags\n );\n if (documentation) {\n contents += `\\n---\\n${documentation}`;\n }\n\n return {\n range: sourceRange,\n contents,\n };\n },\n doRename(doc, params) {\n const fileName = getFSPath(doc);\n if (!fileName) return;\n\n const project = getTSProject(fileName);\n const extracted = processScript(doc, project);\n const sourceOffset = doc.offsetAt(params.position);\n const generatedOffset = extracted.generatedOffsetAt(sourceOffset);\n if (generatedOffset === undefined) return;\n\n const renameLocations = project.service.findRenameLocations(\n fileName,\n generatedOffset,\n false,\n false,\n false\n );\n\n if (!renameLocations) return;\n\n const changes: { [uri: string]: TextEdit[] } = {};\n\n for (const rename of renameLocations) {\n const renameURI = filenameToURI(rename.fileName);\n const renameDoc = documents.get(renameURI);\n let edit: TextEdit | undefined;\n if (!renameDoc) continue;\n if (markoFileReg.test(renameURI)) {\n const extracted = processScript(renameDoc, project);\n const sourceRange = sourceLocationAtTextSpan(\n extracted,\n rename.textSpan\n );\n if (sourceRange) {\n edit = {\n newText: params.newName,\n range: sourceRange,\n };\n }\n } else {\n edit = {\n newText: params.newName,\n range: docLocationAtTextSpan(renameDoc, rename.textSpan),\n };\n }\n\n if (edit) {\n if (changes[renameURI]) {\n changes[renameURI].push(edit);\n } else {\n changes[renameURI] = [edit];\n }\n }\n }\n\n return {\n changes,\n };\n },\n doValidate(doc) {\n const fileName = getFSPath(doc);\n if (!fileName) return;\n\n const project = getTSProject(fileName);\n const extracted = processScript(doc, project);\n\n let results: Diagnostic[] | undefined;\n for (const tsDiag of project.service.getSuggestionDiagnostics(fileName)) {\n addDiag(tsDiag);\n }\n\n for (const tsDiag of project.service.getSyntacticDiagnostics(fileName)) {\n addDiag(tsDiag);\n }\n\n for (const tsDiag of project.service.getSemanticDiagnostics(fileName)) {\n addDiag(tsDiag);\n }\n\n return results;\n\n function addDiag(tsDiag: ts.Diagnostic) {\n const diag = convertDiag(extracted, tsDiag);\n if (diag && !IGNORE_DIAG_REG.test(diag.message)) {\n if (results) {\n results.push(diag);\n } else {\n results = [diag];\n }\n }\n }\n },\n};\n\nfunction processScript(doc: TextDocument, tsProject: TSProject) {\n return processDoc(doc, ({ parsed, filename, project: markoProject }) => {\n const { lookup } = markoProject;\n const { host, markoScriptLang } = tsProject;\n return extractScript({\n ts,\n parsed,\n lookup,\n scriptLang: getScriptLang(filename, ts, host, markoScriptLang),\n runtimeTypesCode: getProjectTypeLibs(markoProject, ts, host)\n ?.markoTypesCode,\n componentFilename: getComponentFilename(filename, host),\n });\n });\n}\n\nfunction sourceLocationAtTextSpan(\n extracted: Extracted,\n { start, length }: ts.TextSpan\n) {\n if (start === 0 && length === 0) return START_LOCATION;\n return extracted.sourceLocationAt(start, start + length);\n}\n\nfunction docLocationAtTextSpan(\n doc: TextDocument,\n { start, length }: ts.TextSpan\n) {\n return {\n start: doc.positionAt(start),\n end: doc.positionAt(start + length),\n };\n}\n\nfunction getTSProject(docFsPath: string): TSProject {\n let configPath: string | undefined;\n let markoScriptLang = ScriptLang.js;\n\n if (docFsPath) {\n configPath = ts.findConfigFile(\n docFsPath,\n ts.sys.fileExists,\n \"tsconfig.json\"\n );\n\n if (configPath) {\n markoScriptLang = ScriptLang.ts;\n } else {\n configPath = ts.findConfigFile(\n docFsPath,\n ts.sys.fileExists,\n \"jsconfig.json\"\n );\n }\n }\n\n const rootDir = (configPath && path.dirname(configPath)) || process.cwd();\n const markoProject = getMarkoProject(configPath && rootDir);\n let projectCache = markoProject.cache.get(getTSProject) as\n | Map<string, TSProject>\n | undefined;\n let cached: TSProject | undefined;\n\n // The typescript project and it's language service is\n // cached with the Marko compiler cache.\n // This causes the cache to be properly cleared when files change.\n if (projectCache) {\n cached = projectCache.get(rootDir);\n if (cached) return cached;\n } else {\n // Within the compiler cache we store a map\n // of project paths to project info.\n projectCache = new Map();\n markoProject.cache.set(getTSProject, projectCache);\n }\n\n const { fileNames, options, projectReferences } =\n ts.parseJsonConfigFileContent(\n (configPath && ts.readConfigFile(configPath, ts.sys.readFile).config) || {\n compilerOptions: { lib: [\"dom\", \"node\", \"esnext\"] },\n },\n ts.sys,\n rootDir,\n undefined,\n configPath,\n undefined,\n [\n {\n extension: \".marko\",\n isMixedContent: false,\n scriptKind: ts.ScriptKind.Deferred,\n },\n ]\n );\n\n // Only ts like files can inject globals into the project, so we filter out everything else.\n const potentialGlobalFiles = new Set<string>(\n fileNames.filter((file) => /\\.[cm]?ts$/.test(file))\n );\n\n options.rootDir ??= rootDir;\n options.module = ts.ModuleKind.ESNext;\n options.moduleResolution = ts.ModuleResolutionKind.NodeJs;\n options.noEmit =\n options.allowJs =\n options.declaration =\n options.skipLibCheck =\n options.isolatedModules =\n options.resolveJsonModule =\n options.skipDefaultLibCheck =\n options.allowNonTsExtensions =\n true;\n\n const tsPkgFile =\n configPath &&\n ts.resolveModuleName(\"typescript/package.json\", configPath, options, ts.sys)\n .resolvedModule?.resolvedFileName;\n const defaultLibFile = path.join(\n tsPkgFile ? path.join(tsPkgFile, \"../lib\") : __dirname,\n ts.getDefaultLibFileName(options)\n );\n\n const host: ts.LanguageServiceHost = patch(\n ts,\n markoScriptLang,\n extractCache,\n {\n getNewLine() {\n return ts.sys.newLine;\n },\n\n useCaseSensitiveFileNames() {\n return ts.sys.useCaseSensitiveFileNames;\n },\n\n getCompilationSettings() {\n return options;\n },\n\n getCurrentDirectory() {\n return options.rootDir!;\n },\n\n getProjectVersion() {\n return documents.projectVersion.toString(32);\n },\n\n getDefaultLibFileName() {\n return defaultLibFile;\n },\n\n getProjectReferences() {\n return projectReferences;\n },\n\n resolveModuleNames(moduleNames, containingFile) {\n return moduleNames.map<ts.ResolvedModule | undefined>((moduleName) => {\n return ts.resolveModuleName(moduleName, containingFile, options, host)\n .resolvedModule;\n });\n },\n\n readDirectory: ts.sys.readDirectory,\n\n readFile: (filename) => documents.get(filenameToURI(filename))?.getText(),\n\n fileExists: (filename) => documents.exists(filenameToURI(filename)),\n\n getScriptFileNames() {\n const result = new Set(potentialGlobalFiles);\n for (const doc of documents.getAllOpen()) {\n const { scheme, fsPath } = URI.parse(doc.uri);\n if (scheme === \"file\") result.add(fsPath);\n }\n\n return [...result];\n },\n\n getScriptVersion(filename) {\n return `${documents.get(filenameToURI(filename))?.version ?? -1}`;\n },\n\n getScriptKind(filename) {\n switch (path.extname(filename)) {\n case ts.Extension.Js:\n return ts.ScriptKind.JS;\n case ts.Extension.Jsx:\n return ts.ScriptKind.JSX;\n case ts.Extension.Ts:\n return ts.ScriptKind.TS;\n case ts.Extension.Tsx:\n return ts.ScriptKind.TSX;\n case ts.Extension.Json:\n return ts.ScriptKind.JSON;\n default:\n return ts.ScriptKind.Unknown;\n }\n },\n\n getScriptSnapshot(filename) {\n let snapshot = snapshotCache.get(filename);\n if (!snapshot) {\n const doc = documents.get(filenameToURI(filename));\n if (!doc) return;\n snapshot = ts.ScriptSnapshot.fromString(doc.getText());\n snapshotCache.set(filename, snapshot);\n }\n\n return snapshot;\n },\n }\n );\n\n const tsProject: TSProject = {\n host,\n rootDir: options.rootDir!,\n service: ts.createLanguageService(host),\n markoProject,\n markoScriptLang,\n markoProjectTypeLibs: getProjectTypeLibs(markoProject, ts, host),\n };\n\n projectCache.set(rootDir, tsProject);\n return tsProject;\n}\n\nfunction filenameToURI(filename: string) {\n return URI.file(filename).toString();\n}\n\nasync function getPreferences(\n scriptLang: ScriptLang\n): Promise<ts.UserPreferences> {\n const configName = scriptLang === ScriptLang.js ? \"javascript\" : \"typescript\";\n const [preferencesConfig, suggestConfig, inlayHintsConfig] =\n await Promise.all([\n workspace.getConfig(`${configName}.preferences`),\n workspace.getConfig(`${configName}.suggest`),\n workspace.getConfig(`${configName}.inlayHints`),\n ]);\n\n return {\n disableSuggestions: suggestConfig.enabled === false,\n quotePreference: preferencesConfig.quoteStyle || \"auto\",\n includeCompletionsForModuleExports: suggestConfig.autoImports ?? true,\n includeCompletionsForImportStatements:\n suggestConfig.includeCompletionsForImportStatements ?? true,\n includeCompletionsWithSnippetText:\n suggestConfig.includeCompletionsWithSnippetText ?? true,\n includeAutomaticOptionalChainCompletions:\n suggestConfig.includeAutomaticOptionalChainCompletions ?? true,\n includeCompletionsWithInsertText: true,\n includeCompletionsWithClassMemberSnippets:\n suggestConfig.classMemberSnippets?.enabled ?? true,\n includeCompletionsWithObjectLiteralMethodSnippets:\n suggestConfig.objectLiteralMethodSnippets?.enabled ?? true,\n useLabelDetailsInCompletionEntries: true,\n allowIncompleteCompletions: true,\n importModuleSpecifierPreference:\n preferencesConfig.importModuleSpecifierPreference,\n importModuleSpecifierEnding:\n preferencesConfig.importModuleSpecifierEnding || \"auto\",\n allowTextChangesInNewFiles: true,\n providePrefixAndSuffixTextForRename: true,\n includePackageJsonAutoImports:\n preferencesConfig.includePackageJsonAutoImports ?? true,\n provideRefactorNotApplicableReason: true,\n jsxAttributeCompletionStyle:\n preferencesConfig.jsxAttributeCompletionStyle ?? \"auto\",\n includeInlayParameterNameHints:\n inlayHintsConfig.parameterNames?.enabled ?? \"none\",\n includeInlayParameterNameHintsWhenArgumentMatchesName:\n !inlayHintsConfig.parameterNames?.suppressWhenArgumentMatchesName,\n includeInlayFunctionParameterTypeHints:\n inlayHintsConfig.parameterTypes?.enabled ?? true,\n includeInlayVariableTypeHints:\n inlayHintsConfig.variableTypes?.enabled ?? true,\n includeInlayPropertyDeclarationTypeHints:\n inlayHintsConfig.propertyDeclarationTypes?.enabled ?? true,\n includeInlayFunctionLikeReturnTypeHints:\n inlayHintsConfig.functionLikeReturnTypes?.enabled ?? true,\n includeInlayEnumMemberValueHints:\n inlayHintsConfig.enumMemberValues?.enabled ?? true,\n };\n}\n\nfunction printDocumentation(\n docs: ts.SymbolDisplayPart[] | undefined,\n tags: ts.JSDocTagInfo[] | undefined\n) {\n let result = \"\";\n if (docs) {\n result += ts.displayPartsToString(docs);\n }\n\n if (tags) {\n for (const tag of tags) {\n const text = ts.displayPartsToString(tag.text);\n result += `*@${tag.name}*${\n text ? (/\\n/.test(text) ? `\\n${text}` : `- ${text}`) : \"\"\n }`;\n }\n }\n\n return result;\n}\n\nfunction convertDiag(\n extracted: Extracted,\n tsDiag: ts.Diagnostic\n): Diagnostic | undefined {\n const sourceRange =\n tsDiag.start === undefined\n ? START_LOCATION\n : sourceLocationAtTextSpan(extracted, tsDiag as ts.TextSpan);\n\n if (sourceRange) {\n return {\n range: sourceRange,\n source: \"script\",\n code: tsDiag.code,\n tags: convertDiagTags(tsDiag),\n severity: convertDiagSeverity(tsDiag),\n message: ts.flattenDiagnosticMessageText(tsDiag.messageText, \"\\n\"),\n };\n }\n}\n\nfunction convertDiagSeverity(tsDiag: ts.Diagnostic) {\n switch (tsDiag.category) {\n case ts.DiagnosticCategory.Error:\n return DiagnosticSeverity.Error;\n case ts.DiagnosticCategory.Warning:\n return DiagnosticSeverity.Warning;\n case ts.DiagnosticCategory.Suggestion:\n return DiagnosticSeverity.Hint;\n default:\n return DiagnosticSeverity.Information;\n }\n}\n\nfunction convertDiagTags(tsDiag: ts.Diagnostic) {\n let tags: DiagnosticTag[] | undefined;\n\n if (tsDiag.reportsDeprecated) {\n tags = [DiagnosticTag.Deprecated];\n }\n\n if (tsDiag.reportsUnnecessary) {\n if (tags) tags.push(DiagnosticTag.Unnecessary);\n else tags = [DiagnosticTag.Unnecessary];\n }\n\n return tags;\n}\n\nfunction convertCompletionItemKind(kind: ts.ScriptElementKind) {\n switch (kind) {\n case ts.ScriptElementKind.warning:\n case ts.ScriptElementKind.linkText:\n return CompletionItemKind.Text;\n\n case ts.ScriptElementKind.keyword:\n case ts.ScriptElementKind.primitiveType:\n return CompletionItemKind.Keyword;\n\n case ts.ScriptElementKind.scriptElement:\n return CompletionItemKind.File;\n\n case ts.ScriptElementKind.directory:\n return CompletionItemKind.Folder;\n\n case ts.ScriptElementKind.label:\n case ts.ScriptElementKind.string:\n return CompletionItemKind.Constant;\n\n case ts.ScriptElementKind.moduleElement:\n case ts.ScriptElementKind.externalModuleName:\n return CompletionItemKind.Module;\n\n case ts.ScriptElementKind.typeElement:\n case ts.ScriptElementKind.classElement:\n case ts.ScriptElementKind.localClassElement:\n return CompletionItemKind.Class;\n\n case ts.ScriptElementKind.interfaceElement:\n return CompletionItemKind.Interface;\n\n case ts.ScriptElementKind.enumElement:\n return CompletionItemKind.Enum;\n\n case ts.ScriptElementKind.enumMemberElement:\n return CompletionItemKind.EnumMember;\n\n case ts.ScriptElementKind.alias:\n case ts.ScriptElementKind.letElement:\n case ts.ScriptElementKind.constElement:\n case ts.ScriptElementKind.variableElement:\n case ts.ScriptElementKind.parameterElement:\n case ts.ScriptElementKind.localVariableElement:\n return CompletionItemKind.Variable;\n\n case ts.ScriptElementKind.functionElement:\n case ts.ScriptElementKind.localFunctionElement:\n return CompletionItemKind.Function;\n\n case ts.ScriptElementKind.callSignatureElement:\n case ts.ScriptElementKind.memberFunctionElement:\n case ts.ScriptElementKind.indexSignatureElement:\n case ts.ScriptElementKind.constructSignatureElement:\n return CompletionItemKind.Method;\n\n case ts.ScriptElementKind.memberGetAccessorElement:\n case ts.ScriptElementKind.memberSetAccessorElement:\n case ts.ScriptElementKind.memberVariableElement:\n return CompletionItemKind.Field;\n\n case ts.ScriptElementKind.constructorImplementationElement:\n return CompletionItemKind.Constructor;\n\n case ts.ScriptElementKind.typeParameterElement:\n return CompletionItemKind.TypeParameter;\n\n case ts.ScriptElementKind.link:\n case ts.ScriptElementKind.linkName:\n return CompletionItemKind.Reference;\n\n default:\n return CompletionItemKind.Property;\n }\n}\n\nfunction getTSTriggerChar(char: string | undefined) {\n if (char && tsTriggerChars.has(char))\n return char as ts.CompletionsTriggerCharacter;\n}\n\nexport { ScriptService as default };\n", "import path from \"path\";\nimport {\n type Extracted,\n ScriptLang,\n extractScript,\n parse,\n} from \"@marko/language-tools\";\nimport { getMarkoProject } from \"../utils/project\";\nimport getProjectTypeLibs from \"../utils/get-runtime-types\";\nimport getScriptLang from \"../utils/get-script-lang\";\nimport getComponentFilename from \"../utils/get-component-filename\";\n\nconst markoExt = \".marko\";\nconst markoExtReg = /\\.marko$/;\nconst modulePartsReg = /^((?:@(?:[^/]+)\\/)?(?:[^/]+))(.*)$/;\nconst fsPathReg = /^(?:[./\\\\]|[A-Z]:)/i;\n\nexport interface ExtractedSnapshot extends Extracted {\n snapshot: ts.IScriptSnapshot;\n}\n\nexport function patch(\n ts: typeof import(\"typescript/lib/tsserverlibrary\"),\n scriptLang: ScriptLang,\n cache: Map<string, ExtractedSnapshot>,\n host: ts.LanguageServiceHost\n) {\n const projectTypeLibs = getProjectTypeLibs(\n getMarkoProject(host.getCurrentDirectory()),\n ts,\n host\n );\n\n const isMarkoTSFile = (fileName: string) =>\n getScriptLang(fileName, ts, host, scriptLang) === ScriptLang.ts;\n\n /**\n * Ensure the Marko runtime definitions are always loaded.\n */\n const getScriptFileNames = host.getScriptFileNames.bind(host);\n host.getScriptFileNames = () => [\n ...new Set([\n ...getScriptFileNames(),\n projectTypeLibs.internalTypesFile,\n projectTypeLibs.markoTypesFile,\n ]),\n ];\n\n /**\n * Trick TypeScript into thinking Marko files are TS/JS files.\n */\n const getScriptKind = host.getScriptKind?.bind(host);\n if (getScriptKind) {\n host.getScriptKind = (fileName: string) => {\n return markoExtReg.test(fileName)\n ? isMarkoTSFile(fileName)\n ? ts.ScriptKind.TS\n : ts.ScriptKind.JS\n : getScriptKind(fileName);\n };\n }\n\n /**\n * A script snapshot is an immutable string of text representing the contents of a file.\n * We patch it so that Marko files instead return their extracted ts code.\n */\n const getScriptSnapshot = host.getScriptSnapshot.bind(host);\n host.getScriptSnapshot = (filename: string) => {\n if (markoExtReg.test(filename)) {\n let cached = cache.get(filename);\n if (!cached) {\n const code = host.readFile(filename, \"utf-8\") || \"\";\n const markoProject = getMarkoProject(path.dirname(filename));\n cached = extractScript({\n ts,\n parsed: parse(code, filename),\n lookup: markoProject.lookup,\n scriptLang: getScriptLang(filename, ts, host, scriptLang),\n runtimeTypesCode: projectTypeLibs.markoTypesCode,\n componentFilename: getComponentFilename(filename, host),\n }) as ExtractedSnapshot;\n\n cached.snapshot = ts.ScriptSnapshot.fromString(cached.toString());\n cache.set(filename, cached);\n }\n\n return cached.snapshot;\n }\n\n return getScriptSnapshot(filename);\n };\n\n /**\n * This ensures that any directory reads with specific file extensions also include Marko.\n * It is used for example when completing the `from` property of the `import` statement.\n */\n const readDirectory = host.readDirectory?.bind(host);\n if (readDirectory) {\n host.readDirectory = (path, extensions, exclude, include, depth) => {\n return readDirectory(\n path,\n extensions?.concat(markoExt),\n exclude,\n include,\n depth\n );\n };\n }\n\n /**\n * TypeScript doesn't know how to resolve `.marko` files.\n * Below we first try to use TypeScripts normal resolution, and then fallback\n * to seeing if a `.marko` file exists at the same location.\n */\n const resolveModuleNames = host.resolveModuleNames?.bind(host);\n\n if (resolveModuleNames) {\n host.resolveModuleNames = (\n moduleNames,\n containingFile,\n reusedNames,\n redirectedReference,\n options,\n sourceFile\n ) => {\n // TODO: try avoiding using the base resolveModuleNames for `.marko` files.\n const resolvedModules: (\n | ts.ResolvedModuleFull\n | ts.ResolvedModule\n | undefined\n )[] = resolveModuleNames(\n moduleNames,\n containingFile,\n reusedNames,\n redirectedReference,\n options,\n sourceFile\n );\n\n for (let i = resolvedModules.length; i--; ) {\n const moduleName = moduleNames[i];\n if (!resolvedModules[i] && markoExtReg.test(moduleName)) {\n if (fsPathReg.test(moduleName)) {\n // For fs paths just see if it exists on disk.\n const resolvedFileName = path.resolve(\n containingFile,\n \"..\",\n moduleName\n );\n if (host.fileExists(resolvedFileName)) {\n resolvedModules[i] = {\n resolvedFileName,\n extension: isMarkoTSFile(resolvedFileName)\n ? ts.Extension.Ts\n : ts.Extension.Js,\n isExternalLibraryImport: false,\n };\n }\n } else if (moduleName[0] !== \"*\") {\n // For other paths we treat it as a node_module and try resolving\n // that modules `marko.json`. If the `marko.json` exists then we'll\n // try resolving the `.marko` file relative to that.\n const [, nodeModuleName, relativeModulePath] =\n modulePartsReg.exec(moduleName)!;\n const { resolvedModule } = ts.resolveModuleName(\n `${nodeModuleName}/package.json`,\n containingFile,\n options,\n host\n );\n\n if (resolvedModule) {\n const resolvedFileName = path.join(\n resolvedModule.resolvedFileName,\n \"..\",\n relativeModulePath\n );\n if (host.fileExists(resolvedFileName)) {\n const isTS = isMarkoTSFile(resolvedFileName);\n resolvedModules[i] = {\n resolvedFileName,\n extension: isTS ? ts.Extension.Ts : ts.Extension.Js,\n isExternalLibraryImport: isTS,\n };\n }\n }\n }\n }\n }\n\n return resolvedModules;\n };\n }\n\n return host;\n}\n", "import path from \"path\";\nimport type { LanguageServiceHost } from \"typescript/lib/tsserverlibrary\";\nimport type TS from \"typescript/lib/tsserverlibrary\";\nimport type { MarkoProject } from \"./project\";\n\nconst internalTypesFile = path.join(__dirname, \"marko.internal.d.ts\");\nconst defaultMarkoTypesFile = path.join(__dirname, \"marko.runtime.d.ts\");\n\nexport default function getProjectTypeLibs(\n project: MarkoProject,\n ts: typeof TS,\n host: LanguageServiceHost\n) {\n let cached = project.cache.get(getProjectTypeLibs) as\n | {\n internalTypesFile: string;\n markoTypesFile: string;\n markoTypesCode: string;\n }\n | undefined;\n\n if (cached === undefined) {\n const { resolvedTypeReferenceDirective } = ts.resolveTypeReferenceDirective(\n (project.translator.runtimeTypes as string | undefined) || \"marko\",\n path.join(project.rootDir, \"_.d.ts\"),\n host.getCompilationSettings(),\n host\n );\n\n const markoTypesFile =\n resolvedTypeReferenceDirective?.resolvedFileName || defaultMarkoTypesFile;\n\n cached = {\n internalTypesFile,\n markoTypesFile,\n markoTypesCode: host.readFile(markoTypesFile, \"utf-8\") || \"\",\n };\n\n project.cache.set(getProjectTypeLibs, cached);\n }\n\n return cached;\n}\n", "import { ScriptLang } from \"@marko/language-tools\";\nimport type { LanguageServiceHost } from \"typescript/lib/tsserverlibrary\";\nimport type TS from \"typescript/lib/tsserverlibrary\";\n\nexport default function getScriptLang(\n filename: string,\n ts: typeof TS,\n host: LanguageServiceHost,\n projectScriptLang: ScriptLang\n) {\n const configPath = ts.findConfigFile(\n filename,\n host.fileExists.bind(host),\n \"marko.json\"\n );\n\n if (configPath) {\n try {\n const markoConfig = JSON.parse(\n host.readFile(configPath, \"utf-8\") || \"{}\"\n );\n\n const scriptLang = markoConfig[\"script-lang\"] || markoConfig.scriptLang;\n if (scriptLang !== undefined) {\n return scriptLang === ScriptLang.ts ? ScriptLang.ts : ScriptLang.js;\n }\n } catch {\n // ignore\n }\n }\n\n return /[/\\\\]node_modules[/\\\\]/.test(filename)\n ? ScriptLang.js\n : projectScriptLang;\n}\n", "import path from \"path\";\nimport type { LanguageServiceHost } from \"typescript/lib/tsserverlibrary\";\n\nexport default function getComponentFilename(\n from: string,\n host: LanguageServiceHost\n) {\n const dir = path.dirname(from);\n const nameNoExt = path.basename(from, \".marko\");\n const isEntry = nameNoExt === \"index\";\n const componentFull = path.join(dir, `${nameNoExt}.component.`);\n const componentBrowserFull = path.join(\n dir,\n `${nameNoExt}.component-browser.`\n );\n const componentPartial = isEntry ? path.join(dir, \"component.\") : undefined;\n const componentBrowserPartial = isEntry\n ? path.join(dir, \"component-browser.\")\n : undefined;\n for (const entry of host.readDirectory!(dir)) {\n // Prefers `component-browser` over `component`.\n if (\n (entry !== from &&\n ((isEntry && entry.startsWith(componentBrowserPartial!)) ||\n entry.startsWith(componentPartial!))) ||\n entry.startsWith(componentBrowserFull) ||\n entry.startsWith(componentFull)\n ) {\n return entry;\n }\n }\n}\n", "import {\n type LanguageService,\n type LanguageServiceOptions,\n type Stylesheet,\n getCSSLanguageService,\n getLESSLanguageService,\n getSCSSLanguageService,\n} from \"vscode-css-languageservice\";\nimport {\n ColorInformation,\n ColorPresentation,\n Diagnostic,\n DocumentHighlight,\n DocumentLink,\n InitializeParams,\n InsertReplaceEdit,\n Location,\n Range,\n SymbolInformation,\n TextDocumentEdit,\n TextEdit,\n} from \"vscode-languageserver\";\nimport { TextDocument } from \"vscode-languageserver-textdocument\";\nimport { type Extracted, extractStyle } from \"@marko/language-tools\";\nimport { processDoc } from \"../../utils/file\";\nimport fileSystemProvider from \"../../utils/file-system\";\nimport resolveReference from \"../../utils/resolve-url\";\nimport type { Plugin } from \"../types\";\n\ninterface ProcessedStyle {\n parsed: Stylesheet;\n extracted: Extracted;\n virtualDoc: TextDocument;\n service: LanguageService;\n}\n\nconst services: Record<\n string,\n (options: LanguageServiceOptions) => LanguageService\n> = {\n \".css\": getCSSLanguageService,\n \".less\": getLESSLanguageService,\n \".scss\": getSCSSLanguageService,\n};\nlet clientCapabilities: InitializeParams[\"capabilities\"] | undefined;\n\nconst StyleSheetService: Partial<Plugin> = {\n initialize(params) {\n clientCapabilities = params.capabilities;\n },\n async doComplete(doc, params) {\n const sourceOffset = doc.offsetAt(params.position);\n for (const style of processStyle(doc)) {\n // Find the first stylesheet data that contains the offset.\n const generatedPos = style.extracted.generatedPositionAt(sourceOffset);\n if (generatedPos === undefined) continue;\n\n const result = await style.service.doComplete2(\n style.virtualDoc,\n generatedPos,\n style.parsed,\n { resolveReference }\n );\n\n if (result.itemDefaults) {\n const { editRange } = result.itemDefaults;\n if (editRange) {\n if (\"start\" in editRange) {\n result.itemDefaults.editRange = getSourceRange(style, editRange);\n } else {\n editRange.insert = getSourceRange(style, editRange.insert)!;\n editRange.replace = getSourceRange(style, editRange.replace)!;\n }\n }\n }\n\n for (const item of result.items) {\n if (item.textEdit) {\n item.textEdit = getSourceInsertReplaceEdit(style, item.textEdit);\n }\n\n if (item.additionalTextEdits) {\n item.additionalTextEdits = getSourceEdits(\n style,\n item.additionalTextEdits\n );\n }\n }\n\n return result;\n }\n },\n findDefinition(doc, params) {\n const sourceOffset = doc.offsetAt(params.position);\n for (const style of processStyle(doc)) {\n // Find the first stylesheet data that contains the offset.\n const generatedPos = style.extracted.generatedPositionAt(sourceOffset);\n if (generatedPos === undefined) continue;\n\n const result = style.service.findDefinition(\n style.virtualDoc,\n generatedPos,\n style.parsed\n );\n\n if (result) {\n const sourceRange = getSourceRange(style, result.range);\n if (sourceRange) {\n return {\n range: sourceRange,\n uri: doc.uri,\n };\n }\n }\n\n break;\n }\n },\n findReferences(doc, params) {\n const sourceOffset = doc.offsetAt(params.position);\n for (const style of processStyle(doc)) {\n // Find the first stylesheet data that contains the offset.\n const generatedPos = style.extracted.generatedPositionAt(sourceOffset);\n if (generatedPos === undefined) continue;\n\n const result: Location[] = [];\n for (const location of style.service.findReferences(\n style.virtualDoc,\n generatedPos,\n style.parsed\n )) {\n const sourceRange = getSourceRange(style, location.range);\n if (sourceRange) {\n result.push({\n range: sourceRange,\n uri: location.uri,\n });\n }\n }\n\n return result.length ? result : undefined;\n }\n },\n findDocumentSymbols(doc) {\n const result: SymbolInformation[] = [];\n for (const extracted of processStyle(doc)) {\n for (const symbol of extracted.service.findDocumentSymbols(\n extracted.virtualDoc,\n extracted.parsed\n )) {\n if (symbol.location.uri === doc.uri) {\n const sourceRange = getSourceRange(extracted, symbol.location.range);\n if (sourceRange) {\n result.push({\n kind: symbol.kind,\n name: symbol.name,\n tags: symbol.tags,\n deprecated: symbol.deprecated,\n containerName: symbol.containerName,\n location: { uri: doc.uri, range: sourceRange },\n });\n }\n } else {\n result.push(symbol);\n }\n }\n }\n\n return result.length ? result : undefined;\n },\n async findDocumentLinks(doc) {\n const result: DocumentLink[] = [];\n for (const extracted of processStyle(doc)) {\n for (const link of await extracted.service.findDocumentLinks2(\n extracted.virtualDoc,\n extracted.parsed,\n { resolveReference }\n )) {\n const sourceRange = getSourceRange(extracted, link.range);\n if (sourceRange) {\n result.push({\n range: sourceRange,\n target: link.target,\n tooltip: link.tooltip,\n data: link.data,\n });\n }\n }\n }\n\n return result.length ? result : undefined;\n },\n findDocumentHighlights(doc, params) {\n const sourceOffset = doc.offsetAt(params.position);\n for (const style of processStyle(doc)) {\n // Find the first stylesheet data that contains the offset.\n const generatedPos = style.extracted.generatedPositionAt(sourceOffset);\n if (generatedPos === undefined) continue;\n\n const result: DocumentHighlight[] = [];\n for (const highlight of style.service.findDocumentHighlights(\n style.virtualDoc,\n generatedPos,\n style.parsed\n )) {\n const sourceRange = getSourceRange(style, highlight.range);\n if (sourceRange) {\n result.push({\n range: sourceRange,\n kind: highlight.kind,\n });\n }\n }\n\n return result.length ? result : undefined;\n }\n },\n findDocumentColors(doc) {\n const result: ColorInformation[] = [];\n for (const extracted of processStyle(doc)) {\n for (const colorInfo of extracted.service.findDocumentColors(\n extracted.virtualDoc,\n extracted.parsed\n )) {\n const sourceRange = getSourceRange(extracted, colorInfo.range);\n if (sourceRange) {\n result.push({\n range: sourceRange,\n color: colorInfo.color,\n });\n }\n }\n }\n\n return result.length ? result : undefined;\n },\n getColorPresentations(doc, params) {\n for (const extracted of processStyle(doc)) {\n const generatedRange = getGeneratedRange(doc, extracted, params.range);\n // Find the first stylesheet data that contains the offset.\n if (generatedRange === undefined) continue;\n\n const result: ColorPresentation[] = [];\n for (const colorPresentation of extracted.service.getColorPresentations(\n extracted.virtualDoc,\n extracted.parsed,\n params.color,\n generatedRange\n )) {\n const textEdit =\n colorPresentation.textEdit &&\n getSourceEdit(extracted, colorPresentation.textEdit);\n const additionalTextEdits =\n colorPresentation.additionalTextEdits &&\n getSourceEdits(extracted, colorPresentation.additionalTextEdits);\n\n if (textEdit || additionalTextEdits) {\n result.push({\n label: colorPresentation.label,\n textEdit,\n additionalTextEdits,\n });\n }\n }\n\n return result.length ? result : undefined;\n }\n },\n doHover(doc, params) {\n const sourceOffset = doc.offsetAt(params.position);\n for (const style of processStyle(doc)) {\n // Find the first stylesheet data that contains the offset.\n const generatedPos = style.extracted.generatedPositionAt(sourceOffset);\n if (generatedPos === undefined) continue;\n\n const result = style.service.doHover(\n style.virtualDoc,\n generatedPos,\n style.parsed\n );\n\n if (result) {\n if (result.range) {\n const sourceRange = getSourceRange(style, result.range);\n if (sourceRange) {\n return {\n range: sourceRange,\n contents: result.contents,\n };\n }\n } else {\n return result;\n }\n }\n }\n },\n async doRename(doc, params) {\n const sourceOffset = doc.offsetAt(params.position);\n for (const style of processStyle(doc)) {\n // Find the first stylesheet data that contains the offset.\n const generatedOffset = style.extracted.generatedOffsetAt(sourceOffset);\n if (generatedOffset === undefined) continue;\n\n const result = style.service.doRename(\n style.virtualDoc,\n style.virtualDoc.positionAt(generatedOffset),\n params.newName,\n style.parsed\n );\n\n if (result.changes) {\n for (const uri in result.changes) {\n if (uri === doc.uri) {\n result.changes[uri] =\n getSourceEdits(style, result.changes[uri]) || [];\n }\n }\n }\n\n if (result.documentChanges) {\n for (const change of result.documentChanges) {\n if (TextDocumentEdit.is(change)) {\n if (change.textDocument.uri === doc.uri) {\n change.edits = getSourceEdits(style, change.edits) || [];\n }\n }\n }\n }\n\n return result;\n }\n },\n doCodeActions(doc, params) {\n for (const extracted of processStyle(doc)) {\n // Find the first stylesheet data that contains the offset.\n const generatedRange = getGeneratedRange(doc, extracted, params.range);\n if (generatedRange === undefined) continue;\n\n const result = extracted.service.doCodeActions(\n extracted.virtualDoc,\n generatedRange,\n params.context,\n extracted.parsed\n );\n\n for (const command of result) {\n const edits = command.arguments?.[2];\n if (edits && Array.isArray(edits) && isTextEdit(edits[0])) {\n command.arguments![2] = getSourceEdits(extracted, edits);\n }\n }\n\n return result;\n }\n },\n doValidate(doc) {\n const result: Diagnostic[] = [];\n for (const extracted of processStyle(doc)) {\n for (const diag of extracted.service.doValidation(\n extracted.virtualDoc,\n extracted.parsed\n )) {\n const sourceRange = getSourceRange(extracted, diag.range);\n if (sourceRange) {\n diag.source = \"style\";\n diag.range = sourceRange;\n result.push(diag);\n }\n }\n }\n\n return result.length ? result : undefined;\n },\n};\n\nexport { StyleSheetService as default };\n\nfunction processStyle(doc: TextDocument) {\n return processDoc(doc, ({ uri, version, parsed, project: { lookup } }) => {\n const result: ProcessedStyle[] = [];\n for (const [ext, extracted] of extractStyle({\n parsed,\n lookup,\n })) {\n const service = services[ext]?.({\n fileSystemProvider,\n clientCapabilities,\n });\n if (service) {\n const virtualDoc = TextDocument.create(\n uri,\n \"css\",\n version,\n extracted.toString()\n );\n result.push({\n service,\n extracted,\n virtualDoc,\n parsed: service.parseStylesheet(virtualDoc),\n });\n }\n }\n\n return result;\n });\n}\n\nfunction getSourceEdits(\n extracted: ProcessedStyle,\n edits: TextEdit[]\n): TextEdit[] | undefined {\n const result: TextEdit[] = [];\n\n for (const edit of edits) {\n const sourceEdit = getSourceEdit(extracted, edit);\n if (sourceEdit) {\n result.push(sourceEdit);\n }\n }\n\n return result.length ? result : undefined;\n}\n\nfunction getSourceEdit(\n extracted: ProcessedStyle,\n textEdit: TextEdit\n): TextEdit | undefined {\n const sourceRange = getSourceRange(extracted, textEdit.range);\n if (sourceRange) {\n return {\n newText: textEdit.newText,\n range: sourceRange,\n };\n }\n}\n\nfunction getSourceInsertReplaceEdit(\n extracted: ProcessedStyle,\n textEdit: TextEdit | InsertReplaceEdit\n): TextEdit | InsertReplaceEdit | undefined {\n if (isTextEdit(textEdit)) {\n return getSourceEdit(extracted, textEdit);\n } else if (textEdit.replace) {\n const sourceRange = getSourceRange(extracted, textEdit.replace);\n if (sourceRange) {\n return {\n newText: textEdit.newText,\n replace: sourceRange,\n } as InsertReplaceEdit;\n }\n } else {\n const sourceRange = getSourceRange(extracted, textEdit.insert);\n if (sourceRange) {\n return {\n newText: textEdit.newText,\n insert: sourceRange,\n } as InsertReplaceEdit;\n }\n }\n}\n\nfunction getSourceRange(\n style: ProcessedStyle,\n range: Range\n): Range | undefined {\n return style.extracted.sourceLocationAt(\n style.virtualDoc.offsetAt(range.start),\n style.virtualDoc.offsetAt(range.end)\n );\n}\n\nfunction getGeneratedRange(\n doc: TextDocument,\n style: ProcessedStyle,\n range: Range\n): Range | undefined {\n return style.extracted.generatedLocationAt(\n doc.offsetAt(range.start),\n doc.offsetAt(range.end)\n );\n}\n\nfunction isTextEdit(edit: TextEdit | InsertReplaceEdit): edit is TextEdit {\n return (edit as TextEdit).range !== undefined;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_util", "lassoPackageRoot", "resolveFrom", "fs", "connection", "setup", "connection", "setup", "connection", "import_vscode_uri", "path", "process", "import_vscode_languageserver", "import_language_tools", "import_vscode_languageserver", "import_path", "import_vscode_languageserver", "import_language_tools", "stat", "fs", "path", "import_vscode_languageserver", "import_path", "import_vscode_languageserver", "import_vscode_uri", "path", "import_language_tools", "tag", "import_vscode_languageserver", "import_language_tools", "import_path", "import_vscode_languageserver", "path", "import_language_tools", "OpenTagName", "handlers", "OpenTagName", "import_language_tools", "import_fs", "import_vscode_uri", "import_language_tools", "AttrName", "fs", "import_fs", "import_path", "import_vscode_uri", "import_language_tools", "OpenTagName", "path", "fs", "handlers", "OpenTagName", "AttrName", "import_language_tools", "importTagReg", "import_vscode_languageserver", "import_language_tools", "import_vscode_languageserver", "format", "format", "import_path", "import_vscode_languageserver", "import_vscode_uri", "prettier", "import_language_tools", "import_path", "import_language_tools", "import_path", "path", "ts", "import_language_tools", "ts", "import_path", "path", "ts", "path", "readDirectory", "ts", "path", "extracted", "_a", "docs", "import_vscode_css_languageservice", "import_vscode_languageserver", "import_vscode_languageserver_textdocument", "import_language_tools", "service", "connection", "setup"]
7
7
  }