From 710a6a300ecf0ba8928d113445381b6df637b5d2 Mon Sep 17 00:00:00 2001 From: johnsoncodehk Date: Thu, 5 Jan 2023 06:44:59 +0800 Subject: [PATCH] fix: try to resolve failed mapping edit range close #2155 --- .../src/languageFeatures/complete.ts | 2 + .../src/languageFeatures/completeResolve.ts | 1 + .../src/languageFeatures/inlayHints.ts | 2 +- packages/transforms/src/completionItem.ts | 16 +- packages/transforms/src/completionList.ts | 3 +- packages/transforms/src/textEdit.ts | 86 ++++++++-- .../src/services/completions/basic.ts | 2 +- pnpm-lock.yaml | 154 +++++++++--------- .../src/services/completion.ts | 2 +- 9 files changed, 166 insertions(+), 102 deletions(-) diff --git a/packages/language-service/src/languageFeatures/complete.ts b/packages/language-service/src/languageFeatures/complete.ts index e033ffb12..4e1fed0b5 100644 --- a/packages/language-service/src/languageFeatures/complete.ts +++ b/packages/language-service/src/languageFeatures/complete.ts @@ -63,6 +63,7 @@ export function register(context: LanguageServiceRuntimeContext) { cacheData.list = transformCompletionList( embeddedCompletionList, range => map.toSourceRange(range), + map.virtualFileDocument, (newItem, oldItem) => newItem.data = { uri, originalItem: oldItem, @@ -164,6 +165,7 @@ export function register(context: LanguageServiceRuntimeContext) { const completionList = transformCompletionList( embeddedCompletionList, range => map.toSourceRange(range), + map.virtualFileDocument, (newItem, oldItem) => newItem.data = { uri, originalItem: oldItem, diff --git a/packages/language-service/src/languageFeatures/completeResolve.ts b/packages/language-service/src/languageFeatures/completeResolve.ts index c1caec4ed..18ac09468 100644 --- a/packages/language-service/src/languageFeatures/completeResolve.ts +++ b/packages/language-service/src/languageFeatures/completeResolve.ts @@ -48,6 +48,7 @@ export function register(context: LanguageServiceRuntimeContext) { if (range) return range; return map.toSourceRange(embeddedRange); }, + map.virtualFileDocument, ); } } diff --git a/packages/language-service/src/languageFeatures/inlayHints.ts b/packages/language-service/src/languageFeatures/inlayHints.ts index 5253a08b0..bc89d327e 100644 --- a/packages/language-service/src/languageFeatures/inlayHints.ts +++ b/packages/language-service/src/languageFeatures/inlayHints.ts @@ -66,7 +66,7 @@ export function register(context: LanguageServiceRuntimeContext) { const position = map.toSourcePosition(_inlayHint.position); const edits = _inlayHint.textEdits - ?.map(textEdit => transformTextEdit(textEdit, range => map!.toSourceRange(range))) + ?.map(textEdit => transformTextEdit(textEdit, range => map!.toSourceRange(range), map.virtualFileDocument)) .filter(shared.notEmpty); if (position) { diff --git a/packages/transforms/src/completionItem.ts b/packages/transforms/src/completionItem.ts index e818bc75c..ab0d0d102 100644 --- a/packages/transforms/src/completionItem.ts +++ b/packages/transforms/src/completionItem.ts @@ -1,15 +1,19 @@ -import type * as vscode from 'vscode-languageserver-types'; -import { transform as transformLocations } from './locationsLike'; +import * as vscode from 'vscode-languageserver-types'; import { transform as transformTextEdit } from './textEdit'; +import * as shared from '@volar/shared'; -export function transform(item: T, getOtherRange: (range: vscode.Range) => vscode.Range | undefined): T { +export function transform( + item: T, + getOtherRange: (range: vscode.Range) => vscode.Range | undefined, + document: vscode.TextDocument, +): T { return { ...item, additionalTextEdits: item.additionalTextEdits - ? transformLocations(item.additionalTextEdits, getOtherRange) - : undefined, + ?.map(edit => transformTextEdit(edit, getOtherRange, document)) + .filter(shared.notEmpty), textEdit: item.textEdit - ? transformTextEdit(item.textEdit, getOtherRange) + ? transformTextEdit(item.textEdit, getOtherRange, document) : undefined, }; } diff --git a/packages/transforms/src/completionList.ts b/packages/transforms/src/completionList.ts index ec834fbf3..2fd86ca0a 100644 --- a/packages/transforms/src/completionList.ts +++ b/packages/transforms/src/completionList.ts @@ -4,6 +4,7 @@ import { transform as transformCompletionItem } from './completionItem'; export function transform( completionList: T, getOtherRange: (range: vscode.Range) => vscode.Range | undefined, + document: vscode.TextDocument, onItem?: (newItem: vscode.CompletionItem, oldItem: vscode.CompletionItem) => void, ): T { return { @@ -20,7 +21,7 @@ export function transform( : undefined, } : undefined, items: completionList.items.map(item => { - const newItem = transformCompletionItem(item, getOtherRange); + const newItem = transformCompletionItem(item, getOtherRange, document); onItem?.(newItem, item); return newItem; }), diff --git a/packages/transforms/src/textEdit.ts b/packages/transforms/src/textEdit.ts index 385bec113..b40156a43 100644 --- a/packages/transforms/src/textEdit.ts +++ b/packages/transforms/src/textEdit.ts @@ -1,28 +1,84 @@ import * as vscode from 'vscode-languageserver-types'; -export function transform(textEdit: T, getOtherRange: (range: vscode.Range) => vscode.Range | undefined): T | undefined { +export function transform( + textEdit: T, + getOtherRange: (range: vscode.Range) => vscode.Range | undefined, + document: vscode.TextDocument, +): T | undefined { if (vscode.TextEdit.is(textEdit)) { - const range = getOtherRange(textEdit.range); - if (!range) return; - - return { - ...textEdit, - range, + let range = getOtherRange(textEdit.range); + if (range) { + return { + ...textEdit, + range, + }; }; + + const cover = tryRecover(getOtherRange, textEdit.range, textEdit.newText, document); + if (cover) { + return { + ...textEdit, + range: cover.range, + newText: cover.newText, + }; + } } else if (vscode.InsertReplaceEdit.is(textEdit)) { const insert = getOtherRange(textEdit.insert); - if (!insert) return; + const replace = insert ? getOtherRange(textEdit.replace) : undefined; + if (insert && replace) { + return { + ...textEdit, + insert, + replace, + }; + } - const replace = getOtherRange(textEdit.replace); - if (!replace) return; + const recoverInsert = tryRecover(getOtherRange, textEdit.insert, textEdit.newText, document); + const recoverReplace = recoverInsert ? tryRecover(getOtherRange, textEdit.replace, textEdit.newText, document) : undefined; + if (recoverInsert && recoverReplace && recoverInsert.newText === recoverReplace.newText) { + return { + ...textEdit, + insert: recoverInsert.range, + replace: recoverReplace.range, + newText: recoverInsert.newText, + }; + } + } +} - return { - ...textEdit, - insert, - replace, - }; +/** + * update edit text from ". foo" to " foo" + * fix https://github.com/johnsoncodehk/volar/issues/2155 + */ +function tryRecover( + getOtherRange: (range: vscode.Range) => vscode.Range | undefined, + replaceRange: vscode.Range, + newText: string, + document: vscode.TextDocument, +): vscode.TextEdit | undefined { + if (replaceRange.start.line === replaceRange.end.line && replaceRange.end.character > replaceRange.start.character) { + + let character = replaceRange.start.character; + + while (newText.length && replaceRange.end.character > character) { + const newStart = { line: replaceRange.start.line, character: replaceRange.start.character + 1 }; + if (document.getText({ start: replaceRange.start, end: newStart }) === newText[0]) { + newText = newText.slice(1); + character++; + const otherRange = getOtherRange({ start: newStart, end: replaceRange.end }); + if (otherRange) { + return { + newText, + range: otherRange, + }; + } + } + else { + break; + } + } } } diff --git a/plugins/typescript/src/services/completions/basic.ts b/plugins/typescript/src/services/completions/basic.ts index cb5b6a60c..7941f530d 100644 --- a/plugins/typescript/src/services/completions/basic.ts +++ b/plugins/typescript/src/services/completions/basic.ts @@ -103,7 +103,7 @@ export function register( item.insertTextFormat = isSnippet ? vscode.InsertTextFormat.Snippet : vscode.InsertTextFormat.PlainText; item.filterText = getFilterText(tsEntry, wordRange, line, tsEntry.insertText); - if (completionContext!.isMemberCompletion && dotAccessorContext && !isSnippet) { + if (completionContext?.isMemberCompletion && dotAccessorContext && !isSnippet) { item.filterText = dotAccessorContext.text + (item.insertText || item.label); if (!range) { const replacementRange = wordRange; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7df8db73b..1884a85ae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -63,7 +63,7 @@ importers: '@volar-examples/angular-language-server': link:../angular-language-server '@volar/language-server': link:../../packages/language-server '@volar/vscode-language-client': link:../../packages/vscode-language-client - esbuild: 0.16.13 + esbuild: 0.16.14 typesafe-path: 0.2.2 vsce: 2.15.0 vscode-languageclient: 8.0.2 @@ -396,7 +396,7 @@ importers: '@types/vscode': 1.67.0 '@volar/language-server': link:../../packages/language-server '@volar/pug-language-server': link:../pug-language-server - esbuild: 0.16.13 + esbuild: 0.16.14 typesafe-path: 0.2.2 vsce: 2.15.0 vscode-languageclient: 8.0.2 @@ -420,7 +420,7 @@ importers: dependencies: typescript-vue-plugin-forward: file:vue-language-tools/vscode-typescript-vue-plugin/typescript-vue-plugin-forward devDependencies: - esbuild: 0.16.13 + esbuild: 0.16.14 typescript-vue-plugin: link:../typescript-vue-plugin vsce: 2.15.0 @@ -453,8 +453,8 @@ importers: '@volar/vscode-language-client': link:../../packages/vscode-language-client '@volar/vue-language-core': link:../vue-language-core '@volar/vue-language-server': link:../vue-language-server - esbuild: 0.16.13 - esbuild-plugin-copy: 2.0.1_esbuild@0.16.13 + esbuild: 0.16.14 + esbuild-plugin-copy: 2.0.1_esbuild@0.16.14 esbuild-visualizer: 0.4.0 path-browserify: 1.0.1 punycode: 2.1.1 @@ -853,176 +853,176 @@ packages: resolution: {integrity: sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==} dev: false - /@esbuild/android-arm/0.16.13: - resolution: {integrity: sha512-JmtqThupn9Yf+FzANE+GG73ASUkssnPwOsndUElhp23685QzRK+MO1UompOlBaXV9D5FTuYcPnw7p4mCq2YbZQ==} + /@esbuild/android-arm/0.16.14: + resolution: {integrity: sha512-u0rITLxFIeYAvtJXBQNhNuV4YZe+MD1YvIWT7Nicj8hZAtRVZk2PgNH6KclcKDVHz1ChLKXRfX7d7tkbQBUfrg==} engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true optional: true - /@esbuild/android-arm64/0.16.13: - resolution: {integrity: sha512-r4xetsd1ez1NF9/9R2f9Q6AlxqiZLwUqo7ICOcvEVwopVkXUcspIjEbJk0EVTgT6Cp5+ymzGPT6YNV0ievx4yA==} + /@esbuild/android-arm64/0.16.14: + resolution: {integrity: sha512-hTqB6Iq13pW4xaydeqQrs8vPntUnMjbkq+PgGiBMi69eYk74naG2ftHWqKnxn874kNrt5Or3rQ0PJutx2doJuQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true optional: true - /@esbuild/android-x64/0.16.13: - resolution: {integrity: sha512-hKt1bFht/Vtp0xJ0ZVzFMnPy1y1ycmM3KNnp3zsyZfQmw7nhs2WLO4vxdR5YG+6RsHKCb2zbZ3VwlC0Tij0qyA==} + /@esbuild/android-x64/0.16.14: + resolution: {integrity: sha512-jir51K4J0K5Rt0KOcippjSNdOl7akKDVz5I6yrqdk4/m9y+rldGptQUF7qU4YpX8U61LtR+w2Tu2Ph+K/UaJOw==} engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true optional: true - /@esbuild/darwin-arm64/0.16.13: - resolution: {integrity: sha512-ogrVuNi2URocrr3Ps20f075EMm9V7IeenOi9FRj4qdbT6mQlwLuP4l90PW2iBrKERx0oRkcZprEUNsz/3xd7ww==} + /@esbuild/darwin-arm64/0.16.14: + resolution: {integrity: sha512-vrlaP81IuwPaw1fyX8fHCmivP3Gr73ojVEZy+oWJLAiZVcG8o8Phwun/XDnYIFUHxIoUnMFEpg9o38MIvlw8zw==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@esbuild/darwin-x64/0.16.13: - resolution: {integrity: sha512-Agajik9SBGiKD7FPXE+ExW6x3MgA/dUdpZnXa9y1tyfE4lKQx+eQiknSdrBnWPeqa9wL0AOvkhghmYhpVkyqkA==} + /@esbuild/darwin-x64/0.16.14: + resolution: {integrity: sha512-KV1E01eC2hGYA2qzFDRCK4wdZCRUvMwCNcobgpiiOzp5QXpJBqFPdxI69j8vvzuU7oxFXDgANwEkXvpeQqyOyg==} engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@esbuild/freebsd-arm64/0.16.13: - resolution: {integrity: sha512-KxMO3/XihBcHM+xQUM6nQZO1SgQuOsd1DCnKF1a4SIf/i5VD45vrqN3k8ePgFrEbMi7m5JeGmvNqwJXinF0a4Q==} + /@esbuild/freebsd-arm64/0.16.14: + resolution: {integrity: sha512-xRM1RQsazSvL42BNa5XC7ytD4ZDp0ZyJcH7aB0SlYUcHexJUKiDNKR7dlRVlpt6W0DvoRPU2nWK/9/QWS4u2fw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true optional: true - /@esbuild/freebsd-x64/0.16.13: - resolution: {integrity: sha512-Ez15oqV1vwvZ30cVLeBW14BsWq/fdWNQGMOxxqaSJVQVLqHhvgfQ7gxGDiN9tpJdeQhqJO+Q0r02/Tce5+USNg==} + /@esbuild/freebsd-x64/0.16.14: + resolution: {integrity: sha512-7ALTAn6YRRf1O6fw9jmn0rWmOx3XfwDo7njGtjy1LXhDGUjTY/vohEPM3ii5MQ411vJv1r498EEx2aBQTJcrEw==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true optional: true - /@esbuild/linux-arm/0.16.13: - resolution: {integrity: sha512-18dLd2L3mda+iFj6sswyBMSh2UwniamD9M4DwPv8VM+9apRFlQ5IGKxBdumnTuOI4NvwwAernmUseWhYQ9k+rg==} + /@esbuild/linux-arm/0.16.14: + resolution: {integrity: sha512-X6xULug66ulrr4IzrW7qq+eq9n4MtEyagdWvj4o4cmWr+JXOT47atjpDF9j5M2zHY0UQBmqnHhwl+tXpkpIb2w==} engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-arm64/0.16.13: - resolution: {integrity: sha512-qi5n7KwcGViyJeZeQnu8fB6dC3Mlm5PGaqSv2HhQDDx/MPvVfQGNMcv7zcBL4qk3FkuWhGVwXkjQ76x7R0PWlA==} + /@esbuild/linux-arm64/0.16.14: + resolution: {integrity: sha512-TLh2OcbBUQcMYRH4GbiDkDZfZ4t1A3GgmeXY27dHSI6xrU7IkO00MGBiJySmEV6sH3Wa6pAN6UtaVL0DwkGW4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-ia32/0.16.13: - resolution: {integrity: sha512-2489Xad9sr+6GD7nB913fUqpCsSwVwgskkQTq4Or2mZntSPYPebyJm8l1YruHo7oqYMTGV6RiwGE4gRo3H+EPQ==} + /@esbuild/linux-ia32/0.16.14: + resolution: {integrity: sha512-oBZkcZ56UZDFCAfE3Fd/Jgy10EoS7Td77NzNGenM+HSY8BkdQAcI9VF9qgwdOLZ+tuftWD7UqZ26SAhtvA3XhA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-loong64/0.16.13: - resolution: {integrity: sha512-x8KplRu9Y43Px8I9YS+sPBwQ+fw44Mvp2BPVADopKDWz+h3fcj1BvRU58kxb89WObmwKX9sWdtYzepL4Fmx03A==} + /@esbuild/linux-loong64/0.16.14: + resolution: {integrity: sha512-udz/aEHTcuHP+xdWOJmZ5C9RQXHfZd/EhCnTi1Hfay37zH3lBxn/fNs85LA9HlsniFw2zccgcbrrTMKk7Cn1Qg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-mips64el/0.16.13: - resolution: {integrity: sha512-qhhdWph9FLwD9rVVC/nUf7k2U4NZIA6/mGx0B7+O6PFV0GjmPA2E3zDQ4NUjq9P26E0DeAZy9akH9dYcUBRU7A==} + /@esbuild/linux-mips64el/0.16.14: + resolution: {integrity: sha512-kJ2iEnikUOdC1SiTGbH0fJUgpZwa0ITDTvj9EHf9lm3I0hZ4Yugsb3M6XSl696jVxrEocLe519/8CbSpQWFSrg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-ppc64/0.16.13: - resolution: {integrity: sha512-cVWAPKsrRVxI1jCeJHnYSbE3BrEU+pZTZK2gfao9HRxuc+3m4+RLfs3EVEpGLmMKEcWfVCB9wZ3yNxnknutGKQ==} + /@esbuild/linux-ppc64/0.16.14: + resolution: {integrity: sha512-kclKxvZvX5YhykwlJ/K9ljiY4THe5vXubXpWmr7q3Zu3WxKnUe1VOZmhkEZlqtnJx31GHPEV4SIG95IqTdfgfg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-riscv64/0.16.13: - resolution: {integrity: sha512-Agb7dbRyZWnmPn5Vvf0eyqaEUqSsaIUwwyInu2EoFTaIDRp093QU2M5alUyOooMLkRbD1WvqQNwx08Z/g+SAcQ==} + /@esbuild/linux-riscv64/0.16.14: + resolution: {integrity: sha512-fdwP9Dc+Kx/cZwp9T9kNqjAE/PQjfrxbio4rZ3XnC3cVvZBjuxpkiyu/tuCwt6SbAK5th6AYNjFdEV9kGC020A==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-s390x/0.16.13: - resolution: {integrity: sha512-AqRBIrc/+kl08ahliNG+EyU+j41wIzQfwBTKpi80cCDiYvYFPuXjvzZsD9muiu58Isj0RVni9VgC4xK/AnSW4g==} + /@esbuild/linux-s390x/0.16.14: + resolution: {integrity: sha512-++fw3P4fQk9nqvdzbANRqimKspL8pDCnSpXomyhV7V/ISha/BZIYvZwLBWVKp9CVWKwWPJ4ktsezuLIvlJRHqA==} engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true optional: true - /@esbuild/linux-x64/0.16.13: - resolution: {integrity: sha512-S4wn2BimuhPcoArRtVrdHUKIymCCZcYAXQE47kUiX4yrUrEX2/ifn5eKNbZ5c1jJKUlh1gC2ESIN+iw3wQax3g==} + /@esbuild/linux-x64/0.16.14: + resolution: {integrity: sha512-TomtswAuzBf2NnddlrS4W01Tv85RM9YtATB3OugY6On0PLM4Ksz5qvQKVAjtzPKoLgL1FiZtfc8mkZc4IgoMEA==} engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@esbuild/netbsd-x64/0.16.13: - resolution: {integrity: sha512-2c8JWgfUMlQHTdaR5X3xNMwqOyad8kgeCupuVkdm3QkUOzGREjlTETQsK6oHifocYzDCo9FeKcUwsK356SdR+g==} + /@esbuild/netbsd-x64/0.16.14: + resolution: {integrity: sha512-U06pfx8P5CqyoPNfqIJmnf+5/r4mJ1S62G4zE6eOjS59naQcxi6GnscUCPH3b+hRG0qdKoGX49RAyiqW+M9aSw==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true optional: true - /@esbuild/openbsd-x64/0.16.13: - resolution: {integrity: sha512-Bwh+PmKD/LK+xBjqIpnYnKYj0fIyQJ0YpRxsn0F+WfzvQ2OA+GKDlf8AHosiCns26Q4Dje388jQVwfOBZ1GaFw==} + /@esbuild/openbsd-x64/0.16.14: + resolution: {integrity: sha512-/Jl8XVaWEZNu9rZw+n792GIBupQwHo6GDoapHSb/2xp/Ku28eK6QpR2O9cPBkzHH4OOoMH0LB6zg/qczJ5TTGg==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true optional: true - /@esbuild/sunos-x64/0.16.13: - resolution: {integrity: sha512-8wwk6f9XGnhrF94/DBdFM4Xm1JeCyGTCj67r516VS9yvBVQf3Rar54L+XPVDs/oZOokwH+XsktrgkuTMAmjntg==} + /@esbuild/sunos-x64/0.16.14: + resolution: {integrity: sha512-2iI7D34uTbDn/TaSiUbEHz+fUa8KbN90vX5yYqo12QGpu6T8Jl+kxODsWuMCwoTVlqUpwfPV22nBbFPME9OPtw==} engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true optional: true - /@esbuild/win32-arm64/0.16.13: - resolution: {integrity: sha512-Jmwbp/5ArLCiRAHC33ODfcrlIcbP/exXkOEUVkADNJC4e/so2jm+i8IQFvVX/lA2GWvK3GdgcN0VFfp9YITAbg==} + /@esbuild/win32-arm64/0.16.14: + resolution: {integrity: sha512-SjlM7AHmQVTiGBJE/nqauY1aDh80UBsXZ94g4g60CDkrDMseatiqALVcIuElg4ZSYzJs8hsg5W6zS2zLpZTVgg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@esbuild/win32-ia32/0.16.13: - resolution: {integrity: sha512-AX6WjntGjhJHzrPSVvjMD7grxt41koHfAOx6lxLorrpDwwIKKPaGDASPZgvFIZHTbwhOtILW6vAXxYPDsKpDJA==} + /@esbuild/win32-ia32/0.16.14: + resolution: {integrity: sha512-z06t5zqk8ak0Xom5HG81z2iOQ1hNWYsFQp3sczVLVx+dctWdgl80tNRyTbwjaFfui2vFO12dfE3trCTvA+HO4g==} engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@esbuild/win32-x64/0.16.13: - resolution: {integrity: sha512-A+U4gM6OOkPS03UgVU08GTpAAAxPsP/8Z4FmneGo4TaVSD99bK9gVJXlqUEPMO/htFXEAht2O6pX4ErtLY5tVg==} + /@esbuild/win32-x64/0.16.14: + resolution: {integrity: sha512-ED1UpWcM6lAbalbbQ9TrGqJh4Y9TaASUvu8bI/0mgJcxhSByJ6rbpgqRhxYMaQ682WfA71nxUreaTO7L275zrw==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -2984,13 +2984,13 @@ packages: dev: false optional: true - /esbuild-plugin-copy/2.0.1_esbuild@0.16.13: + /esbuild-plugin-copy/2.0.1_esbuild@0.16.14: resolution: {integrity: sha512-/mvriqGv2QAyrkui3REZaLEjwqESBKWZQQJtOZEausI8C4QMChREXGASNzmWpTlHo/v+ipLW73QCiNemBKggMw==} peerDependencies: esbuild: '>= 0.14.0' dependencies: chalk: 4.1.2 - esbuild: 0.16.13 + esbuild: 0.16.14 fs-extra: 10.1.0 globby: 11.1.0 dev: true @@ -3004,34 +3004,34 @@ packages: yargs: 17.6.2 dev: true - /esbuild/0.16.13: - resolution: {integrity: sha512-oYwFdSEIoKM1oYzyem1osgKJAvg5447XF+05ava21fOtilyb2HeQQh26/74K4WeAk5dZmj/Mx10zUqUnI14jhA==} + /esbuild/0.16.14: + resolution: {integrity: sha512-6xAn3O6ZZyoxZAEkwfI9hw4cEqSr/o1ViJtnkvImVkblmUN65Md04o0S/7H1WNu1XGf1Cjij/on7VO4psIYjkw==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.16.13 - '@esbuild/android-arm64': 0.16.13 - '@esbuild/android-x64': 0.16.13 - '@esbuild/darwin-arm64': 0.16.13 - '@esbuild/darwin-x64': 0.16.13 - '@esbuild/freebsd-arm64': 0.16.13 - '@esbuild/freebsd-x64': 0.16.13 - '@esbuild/linux-arm': 0.16.13 - '@esbuild/linux-arm64': 0.16.13 - '@esbuild/linux-ia32': 0.16.13 - '@esbuild/linux-loong64': 0.16.13 - '@esbuild/linux-mips64el': 0.16.13 - '@esbuild/linux-ppc64': 0.16.13 - '@esbuild/linux-riscv64': 0.16.13 - '@esbuild/linux-s390x': 0.16.13 - '@esbuild/linux-x64': 0.16.13 - '@esbuild/netbsd-x64': 0.16.13 - '@esbuild/openbsd-x64': 0.16.13 - '@esbuild/sunos-x64': 0.16.13 - '@esbuild/win32-arm64': 0.16.13 - '@esbuild/win32-ia32': 0.16.13 - '@esbuild/win32-x64': 0.16.13 + '@esbuild/android-arm': 0.16.14 + '@esbuild/android-arm64': 0.16.14 + '@esbuild/android-x64': 0.16.14 + '@esbuild/darwin-arm64': 0.16.14 + '@esbuild/darwin-x64': 0.16.14 + '@esbuild/freebsd-arm64': 0.16.14 + '@esbuild/freebsd-x64': 0.16.14 + '@esbuild/linux-arm': 0.16.14 + '@esbuild/linux-arm64': 0.16.14 + '@esbuild/linux-ia32': 0.16.14 + '@esbuild/linux-loong64': 0.16.14 + '@esbuild/linux-mips64el': 0.16.14 + '@esbuild/linux-ppc64': 0.16.14 + '@esbuild/linux-riscv64': 0.16.14 + '@esbuild/linux-s390x': 0.16.14 + '@esbuild/linux-x64': 0.16.14 + '@esbuild/netbsd-x64': 0.16.14 + '@esbuild/openbsd-x64': 0.16.14 + '@esbuild/sunos-x64': 0.16.14 + '@esbuild/win32-arm64': 0.16.14 + '@esbuild/win32-ia32': 0.16.14 + '@esbuild/win32-x64': 0.16.14 /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -6342,7 +6342,7 @@ packages: terser: optional: true dependencies: - esbuild: 0.16.13 + esbuild: 0.16.14 postcss: 8.4.20 resolve: 1.22.1 rollup: 3.7.5 @@ -6377,7 +6377,7 @@ packages: optional: true dependencies: '@types/node': 18.11.18 - esbuild: 0.16.13 + esbuild: 0.16.14 postcss: 8.4.20 resolve: 1.22.1 rollup: 3.7.5 diff --git a/pug-language-tools/pug-language-service/src/services/completion.ts b/pug-language-tools/pug-language-service/src/services/completion.ts index 0609f0839..0024a7c87 100644 --- a/pug-language-tools/pug-language-service/src/services/completion.ts +++ b/pug-language-tools/pug-language-service/src/services/completion.ts @@ -23,6 +23,6 @@ export function register(htmlLs: html.LanguageService) { options, ); - return transformCompletionList(htmlComplete, htmlRange => pugDoc.map.toSourceRange(htmlRange)); + return transformCompletionList(htmlComplete, htmlRange => pugDoc.map.toSourceRange(htmlRange), pugDoc.map.virtualFileDocument); }; }