Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: vuejs/language-tools
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.37.5
Choose a base ref
...
head repository: vuejs/language-tools
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v0.37.7
Choose a head ref
  • 7 commits
  • 36 files changed
  • 1 contributor

Commits on Jun 12, 2022

  1. Copy the full SHA
    b339bc3 View commit details
  2. chore: changelog

    johnsoncodehk committed Jun 12, 2022
    Copy the full SHA
    4a084c1 View commit details

Commits on Jun 13, 2022

  1. Copy the full SHA
    908fccf View commit details
  2. Copy the full SHA
    0b1ec91 View commit details
  3. Copy the full SHA
    d708323 View commit details
  4. chore: changelog

    johnsoncodehk committed Jun 13, 2022
    Copy the full SHA
    59d6986 View commit details
  5. v0.37.7

    johnsoncodehk committed Jun 13, 2022
    Copy the full SHA
    cbc9815 View commit details
Showing with 228 additions and 151 deletions.
  1. +16 −7 CHANGELOG.md
  2. +2 −2 extensions/vscode-typescript-vue-plugin/package.json
  3. +4 −4 extensions/vscode-vue-language-features/package.json
  4. +1 −35 extensions/vscode-vue-language-features/syntaxes/vue.tmLanguage.json
  5. +1 −1 lerna.json
  6. +2 −2 packages/code-gen/package.json
  7. +1 −1 packages/preview/package.json
  8. +5 −5 packages/pug-language-service/package.json
  9. +1 −1 packages/shared/package.json
  10. +1 −1 packages/source-map/package.json
  11. +2 −2 packages/transforms/package.json
  12. +1 −1 packages/typescript-faster/package.json
  13. +2 −2 packages/typescript-language-service/package.json
  14. +3 −3 packages/typescript-vue-plugin/package.json
  15. +3 −3 packages/vue-code-gen/package.json
  16. +10 −2 packages/vue-code-gen/src/generators/template.ts
  17. +2 −1 packages/vue-code-gen/src/transform.ts
  18. +4 −4 packages/vue-language-server/package.json
  19. +1 −1 packages/vue-language-service-types/package.json
  20. +10 −10 packages/vue-language-service/package.json
  21. +1 −1 packages/vue-test-workspace/package.json
  22. +1 −0 packages/vue-test-workspace/tsconfig.json
  23. +23 −0 packages/vue-test-workspace/typeChecks/petite-vue.html
  24. +2 −2 packages/vue-tsc/package.json
  25. +5 −5 packages/vue-typescript/package.json
  26. +7 −7 packages/vue-typescript/src/lsContext.ts
  27. +1 −5 packages/vue-typescript/src/plugins/file-html.ts
  28. +71 −0 packages/vue-typescript/src/plugins/petite-vue-script.ts
  29. +1 −1 packages/vue-typescript/src/plugins/vue-sfc-customblocks.ts
  30. +1 −1 packages/vue-typescript/src/plugins/vue-sfc-scripts.ts
  31. +2 −2 packages/vue-typescript/src/plugins/vue-sfc-styles.ts
  32. +1 −1 packages/vue-typescript/src/plugins/vue-sfc-template.ts
  33. +2 −2 packages/vue-typescript/src/plugins/vue-typescript-scripts.ts
  34. +1 −1 packages/vue-typescript/src/plugins/vue-typescript-template.ts
  35. +5 −3 packages/vue-typescript/src/sourceFile.ts
  36. +32 −32 pnpm-lock.yaml
23 changes: 16 additions & 7 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,35 @@
# Changelog

## 0.37.7 (2022/6/13)

- fix: cannot resolve external vue file path ([#1445](https://github.com/johnsoncodehk/volar/issues/1445))
- fix: petite-vue v-scope data type loss in inline handlers ([#1442](https://github.com/johnsoncodehk/volar/issues/1442))
- fix: petite-vue createApp() initialData type missing in template ([#1444](https://github.com/johnsoncodehk/volar/issues/1444))

### Our Sponsors

<a href="https://cdn.jsdelivr.net/gh/johnsoncodehk/sponsors/company_compact/sponsors.svg">
<img src="https://cdn.jsdelivr.net/gh/johnsoncodehk/sponsors/company_compact/sponsors.svg"/>
</a>

## 0.37.6 (2022/6/13)

- fix: SFC syntax highlight broken if directives missing `=` sign

## 0.37.5 (2022/6/13)

- feat: support petite-vue
- fix: don't active VitePress intellisense for `.md` if file path in not include by tsconfig ([#1430](https://github.com/johnsoncodehk/volar/issues/1430))
- fix: cannot direct execution of fileReferences command ([#1419](https://github.com/johnsoncodehk/volar/issues/1419))
- fix: avoid "`" auto close break markdown code block input ([#1428](https://github.com/johnsoncodehk/volar/issues/1428))
- fix: component props completion info box missing in template
- fix: directives syntax highlight incorrect if `=` sign missing ([#1423](https://github.com/johnsoncodehk/volar/issues/1423))
- fix: false positive props type error when JS component usage in TS component ([#1426](https://github.com/johnsoncodehk/volar/issues/1426))
- fix: cannot recognize component properties in type reference in template ([#1422](https://github.com/johnsoncodehk/volar/issues/1422))
- fix: slot binding type annotation not working if parent component is `<component :is>` ([#1425](https://github.com/johnsoncodehk/volar/issues/1425))
- fix: patch invalid `:` character in tag name ([#1435](https://github.com/johnsoncodehk/volar/issues/1435))
- fix: auto closing pairs not working in template expressions ([#1437](https://github.com/johnsoncodehk/volar/issues/1437))
- perf: faster markdown content parsing for vitepress

### Our Sponsors

<a href="https://cdn.jsdelivr.net/gh/johnsoncodehk/sponsors/company_compact/sponsors.svg">
<img src="https://cdn.jsdelivr.net/gh/johnsoncodehk/sponsors/company_compact/sponsors.svg"/>
</a>

## 0.37.3 (2022/6/8)

- feat: support find file references
4 changes: 2 additions & 2 deletions extensions/vscode-typescript-vue-plugin/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"private": true,
"name": "vscode-typescript-vue-plugin",
"version": "0.37.5",
"version": "0.37.7",
"repository": {
"type": "git",
"url": "https://github.com/johnsoncodehk/volar.git",
@@ -36,7 +36,7 @@
},
"devDependencies": {
"esbuild": "latest",
"typescript-vue-plugin": "0.37.5",
"typescript-vue-plugin": "0.37.7",
"vsce": "latest"
}
}
8 changes: 4 additions & 4 deletions extensions/vscode-vue-language-features/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"private": true,
"name": "volar",
"version": "0.37.5",
"version": "0.37.7",
"repository": {
"type": "git",
"url": "https://github.com/johnsoncodehk/volar.git",
@@ -759,9 +759,9 @@
},
"devDependencies": {
"@types/vscode": "1.67.0",
"@volar/preview": "0.37.5",
"@volar/shared": "0.37.5",
"@volar/vue-language-server": "0.37.5",
"@volar/preview": "0.37.7",
"@volar/shared": "0.37.7",
"@volar/vue-language-server": "0.37.7",
"@vue/compiler-dom": "^3.2.37",
"@vue/compiler-sfc": "^3.2.37",
"@vue/reactivity": "^3.2.37",
Original file line number Diff line number Diff line change
@@ -745,9 +745,6 @@
},
{
"include": "#vue-directives-original"
},
{
"include": "#vue-directives-original-2"
}
]
},
@@ -778,7 +775,7 @@
"8": {
"name": "entity.other.attribute-name.html.vue"
},
"9": {
"9`": {
"name": "punctuation.separator.key-value.html.vue"
}
},
@@ -807,37 +804,6 @@
}
]
},
"vue-directives-original-2": {
"begin": "(?:\\b(v-)|(:|@|#))(\\[?)([a-zA-Z0-9\\-_]*)(\\]?)(\\:([a-zA-Z0-9\\-_]+))?(?:\\.([a-zA-Z0-9\\-_]+))*\\s*",
"captures": {
"1": {
"name": "entity.other.attribute-name.html.vue"
},
"2": {
"name": "punctuation.separator.key-value.html.vue"
},
"3": {
"name": "punctuation.separator.key-value.html.vue"
},
"4": {
"name": "entity.other.attribute-name.html.vue"
},
"5": {
"name": "punctuation.separator.key-value.html.vue"
},
"6": {
"name": "entity.other.attribute-name.html.vue"
},
"7": {
"name": "entity.other.attribute-name.html.vue"
},
"8": {
"name": "entity.other.attribute-name.html.vue"
}
},
"end": "\\G",
"name": "meta.directive-2.vue"
},
"vue-directives-control": {
"begin": "(v-for)|(v-if|v-else-if|v-else)(?![\\w:-])",
"captures": {
2 changes: 1 addition & 1 deletion lerna.json
Original file line number Diff line number Diff line change
@@ -4,5 +4,5 @@
"extensions/*",
"packages/*"
],
"version": "0.37.5"
"version": "0.37.7"
}
4 changes: 2 additions & 2 deletions packages/code-gen/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@volar/code-gen",
"version": "0.37.5",
"version": "0.37.7",
"main": "out/index.js",
"license": "MIT",
"files": [
@@ -13,6 +13,6 @@
"directory": "packages/code-gen"
},
"dependencies": {
"@volar/source-map": "0.37.5"
"@volar/source-map": "0.37.7"
}
}
2 changes: 1 addition & 1 deletion packages/preview/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@volar/preview",
"version": "0.37.5",
"version": "0.37.7",
"license": "MIT",
"files": [
"bin",
10 changes: 5 additions & 5 deletions packages/pug-language-service/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@volar/pug-language-service",
"version": "0.37.5",
"version": "0.37.7",
"main": "out/index.js",
"license": "MIT",
"files": [
@@ -16,10 +16,10 @@
"vscode-html-languageservice": "^5.0.0"
},
"dependencies": {
"@volar/code-gen": "0.37.5",
"@volar/shared": "0.37.5",
"@volar/source-map": "0.37.5",
"@volar/transforms": "0.37.5",
"@volar/code-gen": "0.37.7",
"@volar/shared": "0.37.7",
"@volar/source-map": "0.37.7",
"@volar/transforms": "0.37.7",
"pug-lexer": "^5.0.1",
"pug-parser": "^6.0.0",
"vscode-languageserver-textdocument": "^1.0.4",
2 changes: 1 addition & 1 deletion packages/shared/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@volar/shared",
"version": "0.37.5",
"version": "0.37.7",
"main": "out/node.js",
"browser": "./out/browser.js",
"license": "MIT",
2 changes: 1 addition & 1 deletion packages/source-map/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@volar/source-map",
"version": "0.37.5",
"version": "0.37.7",
"main": "out/index.js",
"license": "MIT",
"files": [
4 changes: 2 additions & 2 deletions packages/transforms/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@volar/transforms",
"version": "0.37.5",
"version": "0.37.7",
"main": "out/index.js",
"license": "MIT",
"files": [
@@ -13,7 +13,7 @@
"directory": "packages/transforms"
},
"dependencies": {
"@volar/shared": "0.37.5",
"@volar/shared": "0.37.7",
"vscode-languageserver-types": "^3.17.1"
}
}
2 changes: 1 addition & 1 deletion packages/typescript-faster/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@volar/typescript-faster",
"version": "0.37.5",
"version": "0.37.7",
"main": "out/index.js",
"license": "MIT",
"files": [
4 changes: 2 additions & 2 deletions packages/typescript-language-service/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@volar/typescript-language-service",
"version": "0.37.5",
"version": "0.37.7",
"main": "out/index.js",
"license": "MIT",
"files": [
@@ -17,7 +17,7 @@
"typescript": "latest"
},
"dependencies": {
"@volar/shared": "0.37.5",
"@volar/shared": "0.37.7",
"semver": "^7.3.7",
"upath": "^2.0.1",
"vscode-languageserver-protocol": "^3.17.1",
6 changes: 3 additions & 3 deletions packages/typescript-vue-plugin/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "typescript-vue-plugin",
"version": "0.37.5",
"version": "0.37.7",
"main": "out/index.js",
"license": "MIT",
"files": [
@@ -16,7 +16,7 @@
"typescript": "latest"
},
"dependencies": {
"@volar/typescript-faster": "0.37.5",
"@volar/vue-typescript": "0.37.5"
"@volar/typescript-faster": "0.37.7",
"@volar/vue-typescript": "0.37.7"
}
}
6 changes: 3 additions & 3 deletions packages/vue-code-gen/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@volar/vue-code-gen",
"version": "0.37.5",
"version": "0.37.7",
"main": "out/index.js",
"license": "MIT",
"files": [
@@ -16,8 +16,8 @@
"typescript": "latest"
},
"dependencies": {
"@volar/code-gen": "0.37.5",
"@volar/source-map": "0.37.5",
"@volar/code-gen": "0.37.7",
"@volar/source-map": "0.37.7",
"@vue/compiler-core": "^3.2.37",
"@vue/compiler-dom": "^3.2.37",
"@vue/shared": "^3.2.37"
12 changes: 10 additions & 2 deletions packages/vue-code-gen/src/generators/template.ts
Original file line number Diff line number Diff line change
@@ -551,9 +551,14 @@ export function generate(

const vScope = node.props.find(prop => prop.type === CompilerDOM.NodeTypes.DIRECTIVE && prop.name === 'scope');
let inScope = false;
let originalConditionsNum = blockConditions.length;

if (vScope?.type === CompilerDOM.NodeTypes.DIRECTIVE && vScope.exp) {
tsCodeGen.addText(`if (__VLS_types.withScope(__VLS_ctx, `);

const scopeVar = `__VLS_${elementIndex++}`;
const condition = `__VLS_types.withScope(__VLS_ctx, ${scopeVar})`;

tsCodeGen.addText(`const ${scopeVar} = `);
writeCode(
vScope.exp.loc.source,
{
@@ -566,8 +571,10 @@ export function generate(
capabilities: capabilitiesSet.all,
},
);
tsCodeGen.addText(';\n');
tsCodeGen.addText(`if (${condition}) {\n`);
blockConditions.push(condition);
inScope = true;
tsCodeGen.addText(')) {\n');
}

writeDirectives(node);
@@ -587,6 +594,7 @@ export function generate(

if (inScope) {
tsCodeGen.addText('}\n');
blockConditions.length = originalConditionsNum;
}
}
tsCodeGen.addText(`}\n`);
3 changes: 2 additions & 1 deletion packages/vue-code-gen/src/transform.ts
Original file line number Diff line number Diff line change
@@ -22,7 +22,8 @@ export function walkInterpolationFragment(
!!localVars[id.text] ||
// https://github.com/vuejs/core/blob/245230e135152900189f13a4281302de45fdcfaa/packages/compiler-core/src/transforms/transformExpression.ts#L342-L352
isGloballyWhitelisted(id.text) ||
id.text === 'require'
id.text === 'require' ||
id.text.startsWith('__VLS_')
) {
// localVarOffsets.push(localVar.getStart(ast));
}
8 changes: 4 additions & 4 deletions packages/vue-language-server/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@volar/vue-language-server",
"version": "0.37.5",
"version": "0.37.7",
"license": "MIT",
"files": [
"out/**/*.js",
@@ -15,9 +15,9 @@
"directory": "packages/vue-language-server"
},
"dependencies": {
"@volar/shared": "0.37.5",
"@volar/vue-language-service": "0.37.5",
"@volar/vue-typescript": "0.37.5",
"@volar/shared": "0.37.7",
"@volar/vue-language-service": "0.37.7",
"@volar/vue-typescript": "0.37.7",
"@vue/shared": "^3.2.37",
"request-light": "^0.5.8",
"upath": "^2.0.1",
2 changes: 1 addition & 1 deletion packages/vue-language-service-types/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@volar/vue-language-service-types",
"version": "0.37.5",
"version": "0.37.7",
"main": "out/index.js",
"license": "MIT",
"files": [
20 changes: 10 additions & 10 deletions packages/vue-language-service/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@volar/vue-language-service",
"version": "0.37.5",
"version": "0.37.7",
"main": "out/index.js",
"license": "MIT",
"files": [
@@ -19,15 +19,15 @@
"dependencies": {
"@johnsoncodehk/html2pug": "^1.0.0",
"@johnsoncodehk/pug-beautify": "^0.2.2",
"@volar/pug-language-service": "0.37.5",
"@volar/shared": "0.37.5",
"@volar/source-map": "0.37.5",
"@volar/transforms": "0.37.5",
"@volar/typescript-faster": "0.37.5",
"@volar/typescript-language-service": "0.37.5",
"@volar/vue-code-gen": "0.37.5",
"@volar/vue-language-service-types": "0.37.5",
"@volar/vue-typescript": "0.37.5",
"@volar/pug-language-service": "0.37.7",
"@volar/shared": "0.37.7",
"@volar/source-map": "0.37.7",
"@volar/transforms": "0.37.7",
"@volar/typescript-faster": "0.37.7",
"@volar/typescript-language-service": "0.37.7",
"@volar/vue-code-gen": "0.37.7",
"@volar/vue-language-service-types": "0.37.7",
"@volar/vue-typescript": "0.37.7",
"@vscode/emmet-helper": "^2.8.4",
"@vue/compiler-dom": "^3.2.37",
"@vue/reactivity": "^3.2.37",
2 changes: 1 addition & 1 deletion packages/vue-test-workspace/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"private": true,
"name": "@volar/vue-test-workspace",
"version": "0.37.5",
"version": "0.37.7",
"license": "MIT",
"devDependencies": {
"vue": "^3.2.37"
1 change: 1 addition & 0 deletions packages/vue-test-workspace/tsconfig.json
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@
],
"strict": true,
"allowJs": true,
"checkJs": true,
"noUncheckedIndexedAccess": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
23 changes: 23 additions & 0 deletions packages/vue-test-workspace/typeChecks/petite-vue.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<script type="module" lang="ts">
import { exactType } from './shared';

createApp({ foo: 1, exactType })

// @ts-expect-error
const bar = 123;

function createApp(_ = {}) { }
</script>

{{ exactType(foo, {} as number) }}
{{
// @ts-expect-error
bar
}}

<div id="app" v-scope="{ open: true, elseOpen: true }">
<!-- do not fix for now -->
<!-- {{ exactType(open, {} as boolean) }} -->
{{ exactType(elseOpen, {} as boolean) }}
<button @click="elseOpen = !elseOpen">toggle else</button>
</div>
4 changes: 2 additions & 2 deletions packages/vue-tsc/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "vue-tsc",
"version": "0.37.5",
"version": "0.37.7",
"license": "MIT",
"files": [
"bin",
@@ -16,7 +16,7 @@
"vue-tsc": "./bin/vue-tsc.js"
},
"dependencies": {
"@volar/vue-typescript": "0.37.5"
"@volar/vue-typescript": "0.37.7"
},
"peerDependencies": {
"typescript": "*"
10 changes: 5 additions & 5 deletions packages/vue-typescript/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@volar/vue-typescript",
"version": "0.37.5",
"version": "0.37.7",
"main": "out/index.js",
"license": "MIT",
"files": [
@@ -13,13 +13,13 @@
"directory": "packages/vue-typescript"
},
"devDependencies": {
"@volar/pug-language-service": "0.37.5",
"@volar/pug-language-service": "0.37.7",
"typescript": "latest"
},
"dependencies": {
"@volar/code-gen": "0.37.5",
"@volar/source-map": "0.37.5",
"@volar/vue-code-gen": "0.37.5",
"@volar/code-gen": "0.37.7",
"@volar/source-map": "0.37.7",
"@volar/vue-code-gen": "0.37.7",
"@vue/compiler-sfc": "^3.2.37",
"@vue/reactivity": "^3.2.37"
},
14 changes: 7 additions & 7 deletions packages/vue-typescript/src/lsContext.ts
Original file line number Diff line number Diff line change
@@ -28,18 +28,18 @@ export function createLanguageServiceContext(
// .vue.js -> .vue
// .vue.ts -> .vue
// .vue.d.ts (never)
const fileNameTrim = fileName.substring(0, fileName.lastIndexOf('.'));
const vueFileName = fileName.substring(0, fileName.lastIndexOf('.'));

if (fileNameTrim.endsWith('.vue') || fileNameTrim.endsWith('.md') || fileNameTrim.endsWith('.html')) {
const vueFile = documentRegistry.get(fileNameTrim);
if (vueFileName.endsWith('.vue') || vueFileName.endsWith('.md') || vueFileName.endsWith('.html')) {
const vueFile = documentRegistry.get(vueFileName);
if (!vueFile) {
const fileExists = !!host.fileExists?.(fileNameTrim);
const fileExists = !!host.fileExists?.(vueFileName);
if (fileExists) {
// create virtual files
const scriptSnapshot = host.getScriptSnapshot(fileName);
const scriptSnapshot = host.getScriptSnapshot(vueFileName);
if (scriptSnapshot) {
documentRegistry.set(fileName, createSourceFile(
fileName,
documentRegistry.set(vueFileName, createSourceFile(
vueFileName,
scriptSnapshot.getText(0, scriptSnapshot.getLength()),
compilerOptions,
vueCompilerOptions,
6 changes: 1 addition & 5 deletions packages/vue-typescript/src/plugins/file-html.ts
Original file line number Diff line number Diff line change
@@ -20,11 +20,7 @@ export default function (): VueLanguagePlugin {
// style block intellisense support by vscode-html-language-features
if (matchText.startsWith('<script') && matchText.indexOf('src=') === -1) {
// monkey fix replace `<script type="module">` to `<script setup>`
codeGen.addCode2(matchText
.replace('type="module"', 'setup ')
.replace('type=\'module\'', 'setup ')
.replace('type=module', 'setup ')
, match.index, undefined);
codeGen.addCode2(matchText, match.index, undefined);
}
codeGen.addText('\n\n');
content = content.substring(0, match.index) + ' '.repeat(matchText.length) + content.substring(match.index + matchText.length);
71 changes: 71 additions & 0 deletions packages/vue-typescript/src/plugins/petite-vue-script.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import { CodeGen } from '@volar/code-gen';
import { EmbeddedFileMappingData } from '@volar/vue-code-gen';
import { EmbeddedFile, VueLanguagePlugin } from '../sourceFile';

export default function (): VueLanguagePlugin {

return {

getEmbeddedFilesCount(fileName, sfc) {
return fileName.endsWith('.html') ? 1 : 0;
},

getEmbeddedFile(fileName, sfc, i) {

if (sfc.script) {

const createVueArg = sfc.script.content.match(/createApp\s*\(([\s\S]*?)\)/);
const codeGen = new CodeGen<EmbeddedFileMappingData>();

codeGen.addCode2(sfc.script.content, 0, {
vueTag: 'script',
capabilities: {
basic: true,
references: true,
definitions: true,
diagnostic: true,
rename: true,
completion: true,
semanticTokens: true,
},
});

codeGen.addText('\n\n');
codeGen.addText(`const __VLS_scope = `);
if (createVueArg && createVueArg.index !== undefined) {
codeGen.addCode2(createVueArg[1], createVueArg.index + createVueArg[0].indexOf(createVueArg[1]), {
vueTag: 'script',
capabilities: {
references: true,
definitions: true,
rename: true,
},
});
}
else {
codeGen.addText('{}');
}
codeGen.addText(';\n');
codeGen.addText('declare const __VLS_export: new () => typeof __VLS_scope;\n');
codeGen.addText('export default __VLS_export;\n');

const file: EmbeddedFile = {
fileName: fileName + '.__VLS_script.' + sfc.script.lang,
content: codeGen.getText(),
capabilities: {
diagnostics: true,
foldingRanges: false,
formatting: false,
documentSymbol: false,
codeActions: true,
inlayHints: true,
},
isTsHostFile: true,
mappings: codeGen.getMappings(),
};

return file;
}
},
};
}
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@ export default function (): VueLanguagePlugin {

return {

getEmbeddedFilesCount(sfc) {
getEmbeddedFilesCount(fileName, sfc) {
return sfc.customBlocks.length;
},

2 changes: 1 addition & 1 deletion packages/vue-typescript/src/plugins/vue-sfc-scripts.ts
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@ export default function (): VueLanguagePlugin {

return {

getEmbeddedFilesCount(sfc) {
getEmbeddedFilesCount(fileName, sfc) {
return 2;
},

4 changes: 2 additions & 2 deletions packages/vue-typescript/src/plugins/vue-sfc-styles.ts
Original file line number Diff line number Diff line change
@@ -5,8 +5,8 @@ export default function (): VueLanguagePlugin {

return {

getEmbeddedFilesCount(sfc) {
return sfc.styles.length;
getEmbeddedFilesCount(fileName, sfc) {
return fileName.endsWith('.html') ? 0 : sfc.styles.length;
},

getEmbeddedFile(fileName, sfc, i) {
2 changes: 1 addition & 1 deletion packages/vue-typescript/src/plugins/vue-sfc-template.ts
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@ export default function (): VueLanguagePlugin {

return {

getEmbeddedFilesCount(sfc) {
getEmbeddedFilesCount(fileName, sfc) {
return sfc.template ? 1 : 0;
},

4 changes: 2 additions & 2 deletions packages/vue-typescript/src/plugins/vue-typescript-scripts.ts
Original file line number Diff line number Diff line change
@@ -17,8 +17,8 @@ export default function (

return {

getEmbeddedFilesCount(sfc) {
return 2;
getEmbeddedFilesCount(fileName, sfc) {
return fileName.endsWith('.html') ? 0 : 2;
},

getEmbeddedFile(fileName, sfc, i) {
Original file line number Diff line number Diff line change
@@ -25,7 +25,7 @@ export default function (

return {

getEmbeddedFilesCount(sfc) {
getEmbeddedFilesCount(fileName, sfc) {
return 3;
},

8 changes: 5 additions & 3 deletions packages/vue-typescript/src/sourceFile.ts
Original file line number Diff line number Diff line change
@@ -15,6 +15,7 @@ import { parseCssVars } from './utils/parseCssVars';
import useVueFilePlugin from './plugins/file-vue';
import useMdFilePlugin from './plugins/file-md';
import useHtmlFilePlugin from './plugins/file-html';
import usePetiteVueScriptPlugin from './plugins/petite-vue-script';
import useHtmlPlugin from './plugins/vue-template-html';
import usePugPlugin from './plugins/vue-template-pug';
import useVueSfcStyles from './plugins/vue-sfc-styles';
@@ -45,7 +46,7 @@ export interface VueLanguagePlugin {

// TODO: compileHtmlTemplateToAst

getEmbeddedFilesCount?(sfc: Sfc): number;
getEmbeddedFilesCount?(fileName: string, sfc: Sfc): number;

getEmbeddedFile?(fileName: string, sfc: Sfc, i: number): EmbeddedFile | undefined;
}
@@ -231,6 +232,7 @@ export function createSourceFile(
useVueFilePlugin(),
useMdFilePlugin(),
useHtmlFilePlugin(),
usePetiteVueScriptPlugin(),
useHtmlPlugin(),
usePugPlugin(),
useVueSfcStyles(),
@@ -276,7 +278,7 @@ export function createSourceFile(
});
const pluginEmbeddeds = plugins.map(plugin => {
if (plugin.getEmbeddedFilesCount && plugin.getEmbeddedFile) {
const embeddedsCount = computed(() => plugin.getEmbeddedFilesCount!(sfc));
const embeddedsCount = computed(() => plugin.getEmbeddedFilesCount!(fileName, sfc));
const embeddeds = computed(() => {
const computeds: ComputedRef<Embedded | undefined>[] = [];
for (let i = 0; i < embeddedsCount.value; i++) {
@@ -518,7 +520,7 @@ export function createSourceFile(
getCompiledVue: untrack(() => file2VueSourceMap.value),
getSfcTemplateLanguageCompiled: untrack(() => computedHtmlTemplate.value),
getSfcVueTemplateCompiled: untrack(() => templateAstCompiled.value),
getScriptFileName: untrack(() => fileName + '.' + scriptLang.value),
getScriptFileName: untrack(() => fileName.endsWith('.html') ? fileName + '.__VLS_script.' + scriptLang.value : fileName + '.' + scriptLang.value),
getDescriptor: untrack(() => unref(sfc)),
getScriptAst: untrack(() => scriptAst.value),
getScriptSetupAst: untrack(() => scriptSetupAst.value),
64 changes: 32 additions & 32 deletions pnpm-lock.yaml