@marko/language-server 1.0.8 → 1.0.10
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.
- package/dist/index.js +15 -9
- package/dist/index.js.map +2 -2
- package/dist/index.mjs +15 -9
- package/dist/index.mjs.map +2 -2
- package/package.json +7 -7
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/utils/file.ts", "../src/utils/text-documents.ts", "../src/utils/workspace.ts", "../src/utils/messages.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/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\";\nimport { Project } from \"@marko/language-tools\";\n\nimport { clearMarkoCacheForFile } from \"./utils/file\";\nimport * as documents from \"./utils/text-documents\";\nimport * as workspace from \"./utils/workspace\";\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 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 clearMarkoCacheForFile(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 Project.clearCaches();\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 path from \"path\";\n\nimport type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport type { TaglibLookup } from \"@marko/babel-utils\";\nimport { type Parsed, Project, parse } from \"@marko/language-tools\";\nimport { URI } from \"vscode-uri\";\n\nconst processorCaches = new WeakMap<Parsed, Map<unknown, unknown>>();\n\nexport interface MarkoFile {\n uri: string;\n scheme: string;\n version: number;\n lookup: TaglibLookup;\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 cache = Project.getCache(dirname) 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 const lookup = Project.getTagLookup(dirname);\n cache.set(\n doc,\n (file = {\n uri,\n scheme,\n version,\n lookup,\n filename,\n dirname,\n parsed,\n code,\n })\n );\n }\n\n return file;\n}\n\nexport function clearMarkoCacheForFile(doc: TextDocument) {\n const { fsPath: filename } = URI.parse(doc.uri);\n const dirname = filename && path.dirname(filename);\n const cache = Project.getCache(dirname) as Map<TextDocument, MarkoFile>;\n cache.delete(doc);\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 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 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: { parsed, lookup },\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: { parsed, filename, lookup },\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 [<${tag.name}>](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/${tag.name}) HTML tag.`\n : isCoreTag\n ? `Core Marko <${tag.name}> 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: { parsed, filename, lookup },\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 { Project } from \"@marko/language-tools\";\nimport { Diagnostic, DiagnosticSeverity } from \"vscode-languageserver\";\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 try {\n Project.getCompiler(filename && path.dirname(filename)).compileSync(\n doc.getText(),\n filename || \"untitled.marko\",\n {\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 );\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: { parsed, filename, lookup },\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: { parsed, lookup },\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: { parsed, lookup },\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 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 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 type Range,\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 type Location,\n Node,\n NodeType,\n type Parsed,\n Project,\n ScriptLang,\n extractScript,\n} from \"@marko/language-tools\";\nimport { getFSPath, getMarkoFile, 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\";\n\n// Filter out some syntax errors from the TS compiler which will be surfaced from the marko compiler.\nconst IGNORE_DIAG_REG =\n /^(?:(?:Expression|Identifier|['\"][^\\w]['\"]) expected|Invalid character)\\b/i;\n\ninterface TSProject {\n rootDir: string;\n host: ts.LanguageServiceHost;\n service: ts.LanguageService;\n markoScriptLang: ScriptLang;\n}\n\nconst extractCache = new Map<string, ExtractedSnapshot>();\nconst snapshotCache = new Map<string, ts.IScriptSnapshot>();\nconst insertModuleStatementLocCache = new WeakMap<Extracted, Location>();\nconst markoFileReg = /\\.marko$/;\nconst tsTriggerChars = new Set([\".\", '\"', \"'\", \"`\", \"/\", \"@\", \"<\", \"#\", \" \"]);\nconst optionalModifierReg = /\\boptional\\b/;\nconst deprecatedModifierReg = /\\bdeprecated\\b/;\nconst colorModifierReg = /\\bcolor\\b/;\nconst localInternalsPrefix = \"__marko_internal_\";\nconst requiredTSCompilerOptions: ts.CompilerOptions = {\n module: ts.ModuleKind.ESNext,\n moduleResolution: ts.ModuleResolutionKind.Bundler,\n noEmit: true,\n allowJs: true,\n composite: false,\n declaration: false,\n skipLibCheck: true,\n importHelpers: false,\n isolatedModules: true,\n resolveJsonModule: true,\n skipDefaultLibCheck: true,\n emitDeclarationOnly: false,\n allowNonTsExtensions: true,\n emitDecoratorMetadata: false,\n};\nconst defaultTSConfig = {\n include: [],\n compilerOptions: {\n lib: [\"dom\", \"node\", \"esnext\"],\n } satisfies ts.CompilerOptions,\n};\nconst extraTSCompilerExtensions: readonly ts.FileExtensionInfo[] = [\n {\n extension: \".marko\",\n isMixedContent: false,\n scriptKind: ts.ScriptKind.Deferred,\n },\n];\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 tsProject = getTSProject(filename);\n const extracted = processScript(doc, tsProject);\n const lang = Project.getScriptLang(\n filename,\n tsProject.markoScriptLang,\n ts,\n tsProject.host\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: rawText } of change.textChanges) {\n let range: Range | undefined;\n let newText = rawText;\n\n if (span.length === 0 && /^\\s*(?:import|export) /.test(newText)) {\n const cached = insertModuleStatementLocCache.get(extracted);\n newText = newText.replace(/\\n\\s*$/, \"\\n\");\n\n if (cached) {\n range = cached;\n } else {\n const { parsed } = getMarkoFile(doc);\n const offset = getInsertModuleStatementOffset(parsed);\n const start = parsed.positionAt(offset);\n range = {\n start,\n end: start,\n };\n insertModuleStatementLocCache.set(extracted, range);\n }\n } else {\n range = sourceLocationAtTextSpan(extracted, span);\n }\n\n if (range) {\n textEdits.push({ newText, range });\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, ({ filename, parsed, lookup }) => {\n const { host, markoScriptLang } = tsProject;\n return extractScript({\n ts,\n parsed,\n lookup,\n scriptLang: Project.getScriptLang(filename, markoScriptLang, ts, host),\n runtimeTypesCode: Project.getTypeLibs(tsProject.rootDir, ts, host)\n ?.markoTypesCode,\n });\n });\n}\n\nfunction getInsertModuleStatementOffset(parsed: Parsed) {\n const { program } = parsed;\n let firstNode: Node.AnyNode | undefined;\n\n if (program.static.length) {\n // Prefer before the first export, or after the last import.\n let lastImport: Node.Import | undefined;\n for (const node of program.static) {\n switch (node.type) {\n case NodeType.Export:\n return node.start;\n case NodeType.Import:\n lastImport = node;\n break;\n }\n }\n\n if (lastImport) {\n return lastImport.end + 1;\n }\n\n firstNode = program.static[0];\n }\n\n if (program.body.length) {\n if (!firstNode || firstNode.start > program.body[0].start) {\n firstNode = program.body[0];\n }\n }\n\n // Fall back to after the comments of the first node,\n // or the start of the document.\n if (firstNode) {\n return getOffsetAfterComments(firstNode);\n }\n\n return 0;\n}\n\nfunction getOffsetAfterComments(node: Node.AnyNode) {\n const { comments } = node as Node.Commentable;\n if (comments) {\n return comments.at(-1)!.end + 1;\n }\n\n return Math.max(0, node.start - 1);\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 configFile: string | undefined;\n let markoScriptLang = ScriptLang.js;\n\n if (docFsPath) {\n configFile = ts.findConfigFile(\n docFsPath,\n ts.sys.fileExists,\n \"tsconfig.json\"\n );\n\n if (configFile) {\n markoScriptLang = ScriptLang.ts;\n } else {\n configFile = ts.findConfigFile(\n docFsPath,\n ts.sys.fileExists,\n \"jsconfig.json\"\n );\n }\n }\n\n const rootDir = (configFile && path.dirname(configFile)) || process.cwd();\n const cache = Project.getCache(configFile && rootDir);\n let projectCache = 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 cache.set(getTSProject, projectCache);\n }\n\n const { fileNames, options, projectReferences } =\n ts.parseJsonConfigFileContent(\n (configFile && ts.readConfigFile(configFile, ts.sys.readFile).config) ||\n defaultTSConfig,\n ts.sys,\n rootDir,\n requiredTSCompilerOptions,\n configFile,\n undefined,\n extraTSCompilerExtensions\n );\n\n options.rootDir ??= rootDir;\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 const tsPkgFile =\n configFile &&\n ts.resolveModuleName(\"typescript/package.json\", configFile, 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 resolutionCache = ts.createModuleResolutionCache(\n rootDir,\n getCanonicalFileName,\n options\n );\n\n const host: ts.LanguageServiceHost = patch(\n ts,\n configFile,\n extractCache,\n resolutionCache,\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 resolveModuleNameLiterals(\n moduleLiterals,\n containingFile,\n redirectedReference,\n options,\n _containingSourceFile,\n _reusedNames\n ) {\n return moduleLiterals.map((moduleLiteral) => {\n return ts.bundlerModuleNameResolver(\n moduleLiteral.text,\n containingFile,\n options,\n host,\n resolutionCache,\n redirectedReference\n );\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 case ts.Extension.Cjs:\n case ts.Extension.Mjs:\n return ts.ScriptKind.JS;\n case ts.Extension.Jsx:\n return ts.ScriptKind.JSX;\n case ts.Extension.Ts:\n case ts.Extension.Cts:\n case ts.Extension.Mts:\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 markoScriptLang,\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\nfunction getCanonicalFileName(fileName: string) {\n return ts.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase();\n}\n\nexport { ScriptService as default };\n", "import path from \"path\";\nimport type ts from \"typescript/lib/tsserverlibrary\";\nimport {\n type Extracted,\n Processors,\n Project,\n getExt,\n isDefinitionFile,\n} from \"@marko/language-tools\";\n\nconst fsPathReg = /^(?:[./\\\\]|[A-Z]:)/i;\nconst modulePartsReg = /^((?:@(?:[^/]+)\\/)?(?:[^/]+))(.*)$/;\nProject.setDefaultTypePaths({\n internalTypesFile: path.join(__dirname, \"marko.internal.d.ts\"),\n markoTypesFile: path.join(__dirname, \"marko.runtime.d.ts\"),\n});\n\nexport interface ExtractedSnapshot extends Extracted {\n snapshot: ts.IScriptSnapshot;\n}\n\nexport function patch(\n ts: typeof import(\"typescript/lib/tsserverlibrary\"),\n configFile: string | undefined,\n extractCache: Map<\n string,\n ExtractedSnapshot | { snapshot: ts.IScriptSnapshot }\n >,\n resolutionCache: ts.ModuleResolutionCache | undefined,\n host: ts.LanguageServiceHost,\n ps?: InstanceType<typeof ts.server.ProjectService>\n) {\n const processors = Processors.create({\n ts,\n host,\n configFile,\n });\n const rootNames = Object.values(processors)\n .map((processor) => processor.getRootNames?.())\n .flat()\n .filter(Boolean) as string[];\n\n /**\n * Ensure the processor runtime definitions are always loaded.\n */\n const getScriptFileNames = host.getScriptFileNames.bind(host);\n host.getScriptFileNames = () => [\n ...new Set(rootNames.concat(getScriptFileNames())),\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 const processor = getProcessor(fileName);\n if (processor) return processor.getScriptKind(fileName);\n return 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 const processor = getProcessor(fileName);\n if (processor) {\n let cached = extractCache.get(fileName);\n if (!cached) {\n const code = host.readFile(fileName, \"utf-8\") || \"\";\n\n try {\n cached = processor.extract(fileName, code) as ExtractedSnapshot;\n cached.snapshot = ts.ScriptSnapshot.fromString(cached.toString());\n } catch {\n cached = { snapshot: ts.ScriptSnapshot.fromString(\"\") };\n }\n\n // Ensure the project service knows about the file.\n // Without this the project never registers a `ScriptInfo`.\n // TODO: maybe we should patch readFile instead of getScriptSnapshot?\n\n ps?.getOrCreateScriptInfoForNormalizedPath(\n fileName as any,\n true,\n undefined,\n ts.ScriptKind.Deferred,\n false,\n host\n );\n\n extractCache.set(fileName, cached);\n }\n\n return cached.snapshot;\n }\n\n return getScriptSnapshot(fileName);\n };\n\n if (host.getProjectVersion) {\n const getScriptVersion = host.getScriptVersion.bind(host);\n host.getScriptVersion = (fileName: string) => {\n const processor = getProcessor(fileName);\n if (processor) return host.getProjectVersion!();\n return getScriptVersion(fileName);\n };\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(Processors.extensions),\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 resolveModuleNameLiterals = host.resolveModuleNameLiterals?.bind(host);\n\n if (resolveModuleNameLiterals) {\n host.resolveModuleNameLiterals = (\n moduleLiterals,\n containingFile,\n redirectedReference,\n options,\n containingSourceFile,\n reusedNames\n ) => {\n let normalModuleLiterals = moduleLiterals as ts.StringLiteralLike[];\n let resolvedModules:\n | undefined\n | (ts.ResolvedModuleWithFailedLookupLocations | undefined)[];\n\n for (let i = 0; i < moduleLiterals.length; i++) {\n const moduleName = moduleLiterals[i].text;\n const processor =\n moduleName[0] !== \"*\" ? getProcessor(moduleName) : undefined;\n if (processor) {\n let resolvedFileName: string | undefined;\n if (fsPathReg.test(moduleName)) {\n // For fs paths just see if it exists on disk.\n resolvedFileName = path.resolve(containingFile, \"..\", moduleName);\n } else {\n // For other paths we treat it as a node_module and try resolving\n // that modules `package.json`. If the `package.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.bundlerModuleNameResolver(\n `${nodeModuleName}/package.json`,\n containingFile,\n options,\n host,\n resolutionCache\n );\n\n if (resolvedModule) {\n resolvedFileName = path.join(\n resolvedModule.resolvedFileName,\n \"..\",\n relativeModulePath\n );\n }\n }\n\n if (!resolvedModules) {\n resolvedModules = [];\n normalModuleLiterals = [];\n for (let j = 0; j < i; j++) {\n resolvedModules.push(undefined);\n normalModuleLiterals.push(moduleLiterals[j]);\n }\n }\n\n if (resolvedFileName) {\n if (isDefinitionFile(resolvedFileName)) {\n if (!host.fileExists(resolvedFileName)) {\n resolvedFileName = undefined;\n }\n } else {\n const ext = getExt(resolvedFileName)!;\n const definitionFile = `${resolvedFileName.slice(\n 0,\n -ext.length\n )}.d${ext}`;\n if (host.fileExists(definitionFile)) {\n resolvedFileName = definitionFile;\n } else if (!host.fileExists(resolvedFileName)) {\n resolvedFileName = undefined;\n }\n }\n }\n\n resolvedModules.push({\n resolvedModule: resolvedFileName\n ? {\n resolvedFileName,\n extension: processor.getScriptExtension(resolvedFileName),\n isExternalLibraryImport: false,\n }\n : undefined,\n });\n } else if (resolvedModules) {\n resolvedModules.push(undefined);\n }\n }\n\n const normalResolvedModules = normalModuleLiterals.length\n ? resolveModuleNameLiterals(\n normalModuleLiterals,\n containingFile,\n redirectedReference,\n options,\n containingSourceFile,\n reusedNames\n )\n : undefined;\n\n if (resolvedModules) {\n if (normalResolvedModules) {\n for (let i = 0, j = 0; i < resolvedModules.length; i++) {\n if (!resolvedModules[i]) {\n resolvedModules[i] = normalResolvedModules[j++];\n }\n }\n }\n return resolvedModules as readonly ts.ResolvedModuleWithFailedLookupLocations[];\n } else {\n return normalResolvedModules!;\n }\n };\n }\n\n return host;\n\n function getProcessor(fileName: string) {\n const ext = getExt(fileName);\n return ext ? processors[ext] : undefined;\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, 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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",
|
|
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\";\nimport { Project } from \"@marko/language-tools\";\n\nimport { clearMarkoCacheForFile } from \"./utils/file\";\nimport * as documents from \"./utils/text-documents\";\nimport * as workspace from \"./utils/workspace\";\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 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 clearMarkoCacheForFile(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 Project.clearCaches();\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 path from \"path\";\n\nimport type { TextDocument } from \"vscode-languageserver-textdocument\";\nimport type { TaglibLookup } from \"@marko/babel-utils\";\nimport { type Parsed, Project, parse } from \"@marko/language-tools\";\nimport { URI } from \"vscode-uri\";\n\nconst processorCaches = new WeakMap<Parsed, Map<unknown, unknown>>();\n\nexport interface MarkoFile {\n uri: string;\n scheme: string;\n version: number;\n lookup: TaglibLookup;\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 cache = Project.getCache(dirname) 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 const lookup = Project.getTagLookup(dirname);\n cache.set(\n doc,\n (file = {\n uri,\n scheme,\n version,\n lookup,\n filename,\n dirname,\n parsed,\n code,\n })\n );\n }\n\n return file;\n}\n\nexport function clearMarkoCacheForFile(doc: TextDocument) {\n const { fsPath: filename } = URI.parse(doc.uri);\n const dirname = filename && path.dirname(filename);\n const cache = Project.getCache(dirname) as Map<TextDocument, MarkoFile>;\n cache.delete(doc);\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 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 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: { parsed, lookup },\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: { parsed, filename, lookup },\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 [<${tag.name}>](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/${tag.name}) HTML tag.`\n : isCoreTag\n ? `Core Marko <${tag.name}> 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: { parsed, filename, lookup },\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 { Project } from \"@marko/language-tools\";\nimport { Diagnostic, DiagnosticSeverity } from \"vscode-languageserver\";\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 try {\n Project.getCompiler(filename && path.dirname(filename)).compileSync(\n doc.getText(),\n filename || \"untitled.marko\",\n {\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 );\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: { parsed, filename, lookup },\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: { parsed, lookup },\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: { parsed, lookup },\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 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 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 type Range,\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 type Location,\n Node,\n NodeType,\n type Parsed,\n Project,\n ScriptLang,\n extractScript,\n} from \"@marko/language-tools\";\nimport { getFSPath, getMarkoFile, 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\";\n\n// Filter out some syntax errors from the TS compiler which will be surfaced from the marko compiler.\nconst IGNORE_DIAG_REG =\n /^(?:(?:Expression|Identifier|['\"][^\\w]['\"]) expected|Invalid character)\\b/i;\n\ninterface TSProject {\n rootDir: string;\n host: ts.LanguageServiceHost;\n service: ts.LanguageService;\n markoScriptLang: ScriptLang;\n}\n\nconst extractCache = new Map<string, ExtractedSnapshot>();\nconst snapshotCache = new Map<string, ts.IScriptSnapshot>();\nconst insertModuleStatementLocCache = new WeakMap<Extracted, Location>();\nconst markoFileReg = /\\.marko$/;\nconst tsTriggerChars = new Set([\".\", '\"', \"'\", \"`\", \"/\", \"@\", \"<\", \"#\", \" \"]);\nconst optionalModifierReg = /\\boptional\\b/;\nconst deprecatedModifierReg = /\\bdeprecated\\b/;\nconst colorModifierReg = /\\bcolor\\b/;\nconst localInternalsPrefix = \"__marko_internal_\";\nconst requiredTSCompilerOptions: ts.CompilerOptions = {\n module: ts.ModuleKind.ESNext,\n moduleResolution: ts.ModuleResolutionKind.Bundler,\n noEmit: true,\n allowJs: true,\n composite: false,\n declaration: false,\n skipLibCheck: true,\n importHelpers: false,\n isolatedModules: true,\n resolveJsonModule: true,\n skipDefaultLibCheck: true,\n emitDeclarationOnly: false,\n allowNonTsExtensions: true,\n emitDecoratorMetadata: false,\n};\nconst defaultTSConfig = {\n include: [],\n compilerOptions: {\n lib: [\"dom\", \"node\", \"esnext\"],\n } satisfies ts.CompilerOptions,\n};\nconst extraTSCompilerExtensions: readonly ts.FileExtensionInfo[] = [\n {\n extension: \".marko\",\n isMixedContent: false,\n scriptKind: ts.ScriptKind.Deferred,\n },\n];\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 tsProject = getTSProject(filename);\n const extracted = processScript(doc, tsProject);\n const lang = Project.getScriptLang(\n filename,\n tsProject.markoScriptLang,\n ts,\n tsProject.host\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: rawText } of change.textChanges) {\n let range: Range | undefined;\n let newText = rawText;\n\n if (span.length === 0 && /^\\s*(?:import|export) /.test(newText)) {\n const cached = insertModuleStatementLocCache.get(extracted);\n newText = newText.replace(/\\n\\s*$/, \"\\n\");\n\n if (cached) {\n range = cached;\n } else {\n const { parsed } = getMarkoFile(doc);\n const offset = getInsertModuleStatementOffset(parsed);\n const start = parsed.positionAt(offset);\n range = {\n start,\n end: start,\n };\n insertModuleStatementLocCache.set(extracted, range);\n }\n } else {\n range = sourceLocationAtTextSpan(extracted, span);\n }\n\n if (range) {\n textEdits.push({ newText, range });\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, ({ filename, parsed, lookup }) => {\n const { host, markoScriptLang } = tsProject;\n return extractScript({\n ts,\n parsed,\n lookup,\n scriptLang: Project.getScriptLang(filename, markoScriptLang, ts, host),\n runtimeTypesCode: Project.getTypeLibs(tsProject.rootDir, ts, host)\n ?.markoTypesCode,\n });\n });\n}\n\nfunction getInsertModuleStatementOffset(parsed: Parsed) {\n const { program } = parsed;\n let firstNode: Node.AnyNode | undefined;\n\n if (program.static.length) {\n // Prefer before the first export, or after the last import.\n let lastImport: Node.Import | undefined;\n for (const node of program.static) {\n switch (node.type) {\n case NodeType.Export:\n return node.start;\n case NodeType.Import:\n lastImport = node;\n break;\n }\n }\n\n if (lastImport) {\n return lastImport.end + 1;\n }\n\n firstNode = program.static[0];\n }\n\n if (program.body.length) {\n if (!firstNode || firstNode.start > program.body[0].start) {\n firstNode = program.body[0];\n }\n }\n\n // Fall back to after the comments of the first node,\n // or the start of the document.\n if (firstNode) {\n return getOffsetAfterComments(firstNode);\n }\n\n return 0;\n}\n\nfunction getOffsetAfterComments(node: Node.AnyNode) {\n const { comments } = node as Node.Commentable;\n if (comments) {\n return comments.at(-1)!.end + 1;\n }\n\n return Math.max(0, node.start - 1);\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 configFile: string | undefined;\n let markoScriptLang = ScriptLang.js;\n\n if (docFsPath) {\n configFile = ts.findConfigFile(\n docFsPath,\n ts.sys.fileExists,\n \"tsconfig.json\"\n );\n\n if (configFile) {\n markoScriptLang = ScriptLang.ts;\n } else {\n configFile = ts.findConfigFile(\n docFsPath,\n ts.sys.fileExists,\n \"jsconfig.json\"\n );\n }\n }\n\n const rootDir = (configFile && path.dirname(configFile)) || process.cwd();\n const cache = Project.getCache(configFile && rootDir);\n let projectCache = 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 cache.set(getTSProject, projectCache);\n }\n\n const { fileNames, options, projectReferences } =\n ts.parseJsonConfigFileContent(\n (configFile && ts.readConfigFile(configFile, ts.sys.readFile).config) ||\n defaultTSConfig,\n ts.sys,\n rootDir,\n requiredTSCompilerOptions,\n configFile,\n undefined,\n extraTSCompilerExtensions\n );\n\n options.rootDir ??= rootDir;\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 const tsPkgFile =\n configFile &&\n ts.resolveModuleName(\"typescript/package.json\", configFile, 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 resolutionCache = ts.createModuleResolutionCache(\n rootDir,\n getCanonicalFileName,\n options\n );\n\n const host: ts.LanguageServiceHost = patch(\n ts,\n configFile,\n extractCache,\n resolutionCache,\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 resolveModuleNameLiterals(\n moduleLiterals,\n containingFile,\n redirectedReference,\n options,\n _containingSourceFile,\n _reusedNames\n ) {\n return moduleLiterals.map((moduleLiteral) => {\n return ts.bundlerModuleNameResolver(\n moduleLiteral.text,\n containingFile,\n options,\n host,\n resolutionCache,\n redirectedReference\n );\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 case ts.Extension.Cjs:\n case ts.Extension.Mjs:\n return ts.ScriptKind.JS;\n case ts.Extension.Jsx:\n return ts.ScriptKind.JSX;\n case ts.Extension.Ts:\n case ts.Extension.Cts:\n case ts.Extension.Mts:\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 markoScriptLang,\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\nfunction getCanonicalFileName(fileName: string) {\n return ts.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase();\n}\n\nexport { ScriptService as default };\n", "import path from \"path\";\nimport type ts from \"typescript/lib/tsserverlibrary\";\nimport {\n type Extracted,\n Processors,\n Project,\n getExt,\n isDefinitionFile,\n} from \"@marko/language-tools\";\n\nconst fsPathReg = /^(?:[./\\\\]|[A-Z]:)/i;\nconst modulePartsReg = /^((?:@(?:[^/]+)\\/)?(?:[^/]+))(.*)$/;\nProject.setDefaultTypePaths({\n internalTypesFile: path.join(__dirname, \"marko.internal.d.ts\"),\n markoTypesFile: path.join(__dirname, \"marko.runtime.d.ts\"),\n});\n\nexport interface ExtractedSnapshot extends Extracted {\n snapshot: ts.IScriptSnapshot;\n}\n\nexport function patch(\n ts: typeof import(\"typescript/lib/tsserverlibrary\"),\n configFile: string | undefined,\n extractCache: Map<\n string,\n ExtractedSnapshot | { snapshot: ts.IScriptSnapshot }\n >,\n resolutionCache: ts.ModuleResolutionCache | undefined,\n host: ts.LanguageServiceHost,\n ps?: InstanceType<typeof ts.server.ProjectService>\n) {\n const processors = Processors.create({\n ts,\n host,\n configFile,\n });\n const rootNames = Object.values(processors)\n .map((processor) => processor.getRootNames?.())\n .flat()\n .filter(Boolean) as string[];\n\n const trackFile = ps\n ? (fileName: string) => {\n // Ensure the project service knows about the file.\n // Without this the project never registers a `ScriptInfo`.\n // TODO: maybe we should patch readFile instead of getScriptSnapshot?\n\n ps.getOrCreateScriptInfoForNormalizedPath(\n fileName as any,\n true,\n undefined,\n ts.ScriptKind.Deferred,\n false,\n host\n );\n }\n : () => {};\n\n /**\n * Ensure the processor runtime definitions are always loaded.\n */\n const getScriptFileNames = host.getScriptFileNames.bind(host);\n host.getScriptFileNames = () => [\n ...new Set(rootNames.concat(getScriptFileNames())),\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 const processor = getProcessor(fileName);\n if (processor) return processor.getScriptKind(fileName);\n return 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 const processor = getProcessor(fileName);\n if (processor) {\n let cached = extractCache.get(fileName);\n\n if (!cached) {\n const code = host.readFile(fileName, \"utf-8\") || \"\";\n\n try {\n cached = processor.extract(fileName, code) as ExtractedSnapshot;\n cached.snapshot = ts.ScriptSnapshot.fromString(cached.toString());\n } catch {\n cached = { snapshot: ts.ScriptSnapshot.fromString(\"\") };\n }\n\n trackFile(fileName);\n extractCache.set(fileName, cached);\n }\n\n return cached.snapshot;\n }\n\n return getScriptSnapshot(fileName);\n };\n\n if (host.getProjectVersion) {\n const getScriptVersion = host.getScriptVersion.bind(host);\n host.getScriptVersion = (fileName: string) => {\n const processor = getProcessor(fileName);\n if (processor) return host.getProjectVersion!();\n return getScriptVersion(fileName);\n };\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(Processors.extensions),\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 resolveModuleNameLiterals = host.resolveModuleNameLiterals?.bind(host);\n\n if (resolveModuleNameLiterals) {\n host.resolveModuleNameLiterals = (\n moduleLiterals,\n containingFile,\n redirectedReference,\n options,\n containingSourceFile,\n reusedNames\n ) => {\n let normalModuleLiterals = moduleLiterals as ts.StringLiteralLike[];\n let resolvedModules:\n | undefined\n | (ts.ResolvedModuleWithFailedLookupLocations | undefined)[];\n\n for (let i = 0; i < moduleLiterals.length; i++) {\n const moduleLiteral = moduleLiterals[i];\n const moduleName = moduleLiteral.text;\n const processor =\n moduleName[0] !== \"*\" ? getProcessor(moduleName) : undefined;\n if (processor) {\n let resolvedFileName: string | undefined;\n if (fsPathReg.test(moduleName)) {\n // For fs paths just see if it exists on disk.\n resolvedFileName = path.resolve(containingFile, \"..\", moduleName);\n } else {\n // For other paths we treat it as a node_module and try resolving\n // that modules `package.json`. If the `package.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.bundlerModuleNameResolver(\n `${nodeModuleName}/package.json`,\n containingFile,\n options,\n host,\n resolutionCache\n );\n\n if (resolvedModule) {\n resolvedFileName = path.join(\n resolvedModule.resolvedFileName,\n \"..\",\n relativeModulePath\n );\n }\n }\n\n if (!resolvedModules) {\n resolvedModules = [];\n normalModuleLiterals = [];\n for (let j = 0; j < i; j++) {\n resolvedModules.push(undefined);\n normalModuleLiterals.push(moduleLiterals[j]);\n }\n }\n\n if (resolvedFileName) {\n if (isDefinitionFile(resolvedFileName)) {\n if (!host.fileExists(resolvedFileName)) {\n resolvedFileName = undefined;\n }\n } else {\n const ext = getExt(resolvedFileName)!;\n const definitionFile = `${resolvedFileName.slice(\n 0,\n -ext.length\n )}.d${ext}`;\n if (host.fileExists(definitionFile)) {\n resolvedFileName = definitionFile;\n } else if (!host.fileExists(resolvedFileName)) {\n resolvedFileName = undefined;\n }\n }\n }\n\n resolvedModules.push({\n resolvedModule: resolvedFileName\n ? {\n resolvedFileName,\n extension: processor.getScriptExtension(resolvedFileName),\n isExternalLibraryImport: false,\n }\n : undefined,\n });\n } else if (resolvedModules) {\n resolvedModules.push(undefined);\n normalModuleLiterals.push(moduleLiteral);\n }\n }\n\n const normalResolvedModules = normalModuleLiterals.length\n ? resolveModuleNameLiterals(\n normalModuleLiterals,\n containingFile,\n redirectedReference,\n options,\n containingSourceFile,\n reusedNames\n )\n : undefined;\n\n if (resolvedModules) {\n if (normalResolvedModules) {\n for (let i = 0, j = 0; i < resolvedModules.length; i++) {\n if (!resolvedModules[i]) {\n resolvedModules[i] = normalResolvedModules[j++];\n }\n }\n }\n return resolvedModules as readonly ts.ResolvedModuleWithFailedLookupLocations[];\n } else {\n return normalResolvedModules!;\n }\n };\n }\n\n return host;\n\n function getProcessor(fileName: string) {\n const ext = getExt(fileName);\n return ext ? processors[ext] : undefined;\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, 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
6
|
"names": ["import_util", "import_language_tools", "path", "process", "import_vscode_uri", "fs", "connection", "setup", "connection", "setup", "connection", "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_language_tools", "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", "path", "ts", "extractCache", "_a", "readDirectory", "ts", "path", "extracted", "options", "_a", "docs", "import_vscode_css_languageservice", "import_vscode_languageserver", "import_vscode_languageserver_textdocument", "import_language_tools", "service", "connection", "setup"]
|
|
7
7
|
}
|