@vue/language-core 2.0.5 → 2.0.7

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.
@@ -173,19 +173,25 @@ const __VLS_intrinsicElements: __VLS_IntrinsicElements;
173
173
  function __VLS_getVForSourceType(source: number): [number, number, number][];
174
174
  function __VLS_getVForSourceType(source: string): [string, number, number][];
175
175
  function __VLS_getVForSourceType<T extends any[]>(source: T): [
176
- T[number], // item
177
- number, // key
178
- number, // index
176
+ item: T[number],
177
+ key: number,
178
+ index: number,
179
179
  ][];
180
180
  function __VLS_getVForSourceType<T extends { [Symbol.iterator](): Iterator<any> }>(source: T): [
181
- T extends { [Symbol.iterator](): Iterator<infer T1> } ? T1 : never, // item
182
- number, // key
183
- undefined, // index
181
+ item: T extends { [Symbol.iterator](): Iterator<infer T1> } ? T1 : never,
182
+ key: number,
183
+ index: undefined,
184
+ ][];
185
+ // #3845
186
+ function __VLS_getVForSourceType<T extends number | { [Symbol.iterator](): Iterator<any> }>(source: T): [
187
+ item: number | (Exclude<T, number> extends { [Symbol.iterator](): Iterator<infer T1> } ? T1 : never),
188
+ key: number,
189
+ index: undefined,
184
190
  ][];
185
191
  function __VLS_getVForSourceType<T>(source: T): [
186
- T[keyof T], // item
187
- keyof T, // key
188
- number, // index
192
+ item: T[keyof T],
193
+ key: keyof T,
194
+ index: number,
189
195
  ][];
190
196
 
191
197
  // @ts-ignore
@@ -284,17 +290,22 @@ type __VLS_PrettifyGlobal<T> = { [K in keyof T]: T[K]; } & {};
284
290
  }
285
291
  }
286
292
  function* generateSrc() {
287
- if (!script?.src)
293
+ if (!script?.src) {
288
294
  return;
295
+ }
289
296
  let src = script.src;
290
- if (src.endsWith('.d.ts'))
297
+ if (src.endsWith('.d.ts')) {
291
298
  src = src.substring(0, src.length - '.d.ts'.length);
292
- else if (src.endsWith('.ts'))
299
+ }
300
+ else if (src.endsWith('.ts')) {
293
301
  src = src.substring(0, src.length - '.ts'.length);
294
- else if (src.endsWith('.tsx'))
302
+ }
303
+ else if (src.endsWith('.tsx')) {
295
304
  src = src.substring(0, src.length - '.tsx'.length) + '.jsx';
296
- if (!src.endsWith('.js') && !src.endsWith('.jsx'))
305
+ }
306
+ if (!src.endsWith('.js') && !src.endsWith('.jsx')) {
297
307
  src = src + '.js';
308
+ }
298
309
  yield _(`export * from `);
299
310
  yield _([
300
311
  `'${src}'`,
@@ -325,15 +336,19 @@ type __VLS_PrettifyGlobal<T> = { [K in keyof T]: T[K]; } & {};
325
336
  yield _(`export { default } from '${src}';\n`);
326
337
  }
327
338
  function* generateScriptContentBeforeExportDefault() {
328
- if (!script)
339
+ if (!script) {
329
340
  return;
330
- if (!!scriptSetup && scriptRanges?.exportDefault)
341
+ }
342
+ if (!!scriptSetup && scriptRanges?.exportDefault) {
331
343
  return yield _(generateSourceCode(script, 0, scriptRanges.exportDefault.expression.start));
344
+ }
332
345
  let isExportRawObject = false;
333
- if (scriptRanges?.exportDefault)
346
+ if (scriptRanges?.exportDefault) {
334
347
  isExportRawObject = script.content.substring(scriptRanges.exportDefault.expression.start, scriptRanges.exportDefault.expression.end).startsWith('{');
335
- if (!isExportRawObject || !vueCompilerOptions.optionsWrapper.length || !scriptRanges?.exportDefault)
348
+ }
349
+ if (!isExportRawObject || !vueCompilerOptions.optionsWrapper.length || !scriptRanges?.exportDefault) {
336
350
  return yield _(generateSourceCode(script, 0, script.content.length));
351
+ }
337
352
  yield _(generateSourceCode(script, 0, scriptRanges.exportDefault.expression.start));
338
353
  yield _(vueCompilerOptions.optionsWrapper[0]);
339
354
  yield _(['', 'script', scriptRanges.exportDefault.expression.start, (0, utils_1.disableAllFeatures)({
@@ -358,14 +373,17 @@ type __VLS_PrettifyGlobal<T> = { [K in keyof T]: T[K]; } & {};
358
373
  yield _(generateSourceCode(script, scriptRanges.exportDefault.expression.end, script.content.length));
359
374
  }
360
375
  function* generateScriptContentAfterExportDefault() {
361
- if (!script)
376
+ if (!script) {
362
377
  return;
363
- if (!!scriptSetup && scriptRanges?.exportDefault)
378
+ }
379
+ if (!!scriptSetup && scriptRanges?.exportDefault) {
364
380
  yield _(generateSourceCode(script, scriptRanges.exportDefault.expression.end, script.content.length));
381
+ }
365
382
  }
366
383
  function* generateScriptSetupImports() {
367
- if (!scriptSetup || !scriptSetupRanges)
384
+ if (!scriptSetup || !scriptSetupRanges) {
368
385
  return;
386
+ }
369
387
  yield _([
370
388
  scriptSetup.content.substring(0, Math.max(scriptSetupRanges.importSectionEndOffset, scriptSetupRanges.leadingCommentEndOffset)) + '\n',
371
389
  'scriptSetup',
@@ -381,8 +399,9 @@ type __VLS_PrettifyGlobal<T> = { [K in keyof T]: T[K]; } & {};
381
399
  if (scriptSetupRanges.defineProp.length) {
382
400
  yield _(` & ReturnType<typeof import('${vueCompilerOptions.lib}').defineEmits<{\n`);
383
401
  for (const defineProp of scriptSetupRanges.defineProp) {
384
- if (!defineProp.isModel)
402
+ if (!defineProp.isModel) {
385
403
  continue;
404
+ }
386
405
  let propName = 'modelValue';
387
406
  if (defineProp.name) {
388
407
  propName = scriptSetup.content.substring(defineProp.name.start, defineProp.name.end);
@@ -402,8 +421,9 @@ type __VLS_PrettifyGlobal<T> = { [K in keyof T]: T[K]; } & {};
402
421
  yield _(`;\n`);
403
422
  }
404
423
  function* generateScriptSetupAndTemplate() {
405
- if (!scriptSetup || !scriptSetupRanges)
424
+ if (!scriptSetup || !scriptSetupRanges) {
406
425
  return;
426
+ }
407
427
  const definePropMirrors = new Map();
408
428
  if (scriptSetup.generic) {
409
429
  if (!scriptRanges?.exportDefault) {
@@ -543,8 +563,9 @@ type __VLS_PrettifyGlobal<T> = { [K in keyof T]: T[K]; } & {};
543
563
  }
544
564
  }
545
565
  function* generateSetupFunction(functional, mode, definePropMirrors) {
546
- if (!scriptSetupRanges || !scriptSetup)
566
+ if (!scriptSetupRanges || !scriptSetup) {
547
567
  return;
568
+ }
548
569
  const definePropProposalA = scriptSetup.content.trimStart().startsWith('// @experimentalDefinePropProposal=kevinEdition') || vueCompilerOptions.experimentalDefinePropProposal === 'kevinEdition';
549
570
  const definePropProposalB = scriptSetup.content.trimStart().startsWith('// @experimentalDefinePropProposal=johnsonEdition') || vueCompilerOptions.experimentalDefinePropProposal === 'johnsonEdition';
550
571
  if (vueCompilerOptions.target >= 3.3) {
@@ -699,8 +720,9 @@ type __VLS_PrettifyGlobal<T> = { [K in keyof T]: T[K]; } & {};
699
720
  }
700
721
  }
701
722
  function* generateComponent(functional) {
702
- if (!scriptSetupRanges)
723
+ if (!scriptSetupRanges) {
703
724
  return;
725
+ }
704
726
  if (script && scriptRanges?.exportDefault && scriptRanges.exportDefault.expression.start !== scriptRanges.exportDefault.args.start) {
705
727
  // use defineComponent() from user space code if it exist
706
728
  yield _(generateSourceCode(script, scriptRanges.exportDefault.expression.start, scriptRanges.exportDefault.args.start));
@@ -772,12 +794,14 @@ type __VLS_PrettifyGlobal<T> = { [K in keyof T]: T[K]; } & {};
772
794
  }
773
795
  yield _(`},\n`);
774
796
  }
775
- yield _(`emits: ({} as __VLS_NormalizeEmits<typeof __VLS_modelEmitsType`);
776
- if (ranges.emits.define) {
777
- yield _(` & typeof `);
778
- yield _(ranges.emits.name ?? '__VLS_emit');
797
+ if (ranges.defineProp.filter(p => p.isModel).length || ranges.emits.define) {
798
+ yield _(`emits: ({} as __VLS_NormalizeEmits<typeof __VLS_modelEmitsType`);
799
+ if (ranges.emits.define) {
800
+ yield _(` & typeof `);
801
+ yield _(ranges.emits.name ?? '__VLS_emit');
802
+ }
803
+ yield _(`>),\n`);
779
804
  }
780
- yield _(`>),\n`);
781
805
  }
782
806
  if (script && scriptRanges?.exportDefault?.args) {
783
807
  yield _(generateSourceCode(script, scriptRanges.exportDefault.args.start + 1, scriptRanges.exportDefault.args.end - 1));
@@ -243,11 +243,13 @@ function* generate(ts, compilerOptions, vueCompilerOptions, template, shouldGene
243
243
  function* generatePreResolveComponents() {
244
244
  yield _ts(`let __VLS_resolvedLocalAndGlobalComponents!: {}\n`);
245
245
  for (const [tagName] of tagOffsetsMap) {
246
- if (nativeTags.has(tagName))
246
+ if (nativeTags.has(tagName)) {
247
247
  continue;
248
+ }
248
249
  const isNamespacedTag = tagName.indexOf('.') >= 0;
249
- if (isNamespacedTag)
250
+ if (isNamespacedTag) {
250
251
  continue;
252
+ }
251
253
  yield _ts(`& __VLS_WithComponent<'${getCanonicalComponentName(tagName)}', typeof __VLS_localComponents, `);
252
254
  // order is important: https://github.com/vuejs/language-tools/issues/2010
253
255
  yield _ts(`"${(0, shared_1.capitalize)((0, shared_1.camelize)(tagName))}", `);
@@ -385,12 +387,15 @@ function* generate(ts, compilerOptions, vueCompilerOptions, template, shouldGene
385
387
  let originalBlockConditionsLength = blockConditions.length;
386
388
  for (let i = 0; i < node.branches.length; i++) {
387
389
  const branch = node.branches[i];
388
- if (i === 0)
390
+ if (i === 0) {
389
391
  yield _ts('if');
390
- else if (branch.condition)
392
+ }
393
+ else if (branch.condition) {
391
394
  yield _ts('else if');
392
- else
395
+ }
396
+ else {
393
397
  yield _ts('else');
398
+ }
394
399
  let addedBlockCondition = false;
395
400
  if (branch.condition?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION) {
396
401
  yield _ts(` `);
@@ -424,8 +429,9 @@ function* generate(ts, compilerOptions, vueCompilerOptions, template, shouldGene
424
429
  if (leftExpressionRange && leftExpressionText) {
425
430
  const collectAst = createTsAst(node.parseResult, `const [${leftExpressionText}]`);
426
431
  (0, transform_1.collectVars)(ts, collectAst, collectAst, forBlockVars);
427
- for (const varName of forBlockVars)
432
+ for (const varName of forBlockVars) {
428
433
  localVars.set(varName, (localVars.get(varName) ?? 0) + 1);
434
+ }
429
435
  yield _ts([leftExpressionText, 'template', leftExpressionRange.start, presetInfos.all]);
430
436
  yield* generateTsFormat(leftExpressionText, leftExpressionRange.start, formatBrackets.normal);
431
437
  }
@@ -445,8 +451,9 @@ function* generate(ts, compilerOptions, vueCompilerOptions, template, shouldGene
445
451
  yield _ts('}\n');
446
452
  yield* generateTsFormat(source.content, source.loc.start.offset, formatBrackets.normal);
447
453
  }
448
- for (const varName of forBlockVars)
454
+ for (const varName of forBlockVars) {
449
455
  localVars.set(varName, localVars.get(varName) - 1);
456
+ }
450
457
  }
451
458
  function* generateElement(node, parentEl, componentCtxVar) {
452
459
  yield _ts(`{\n`);
@@ -942,7 +949,10 @@ function* generate(ts, compilerOptions, vueCompilerOptions, template, shouldGene
942
949
  else {
943
950
  const propVariableName = (0, shared_1.camelize)(prop.exp.loc.source);
944
951
  if (validTsVarReg.test(propVariableName)) {
945
- yield _ts('__VLS_ctx.');
952
+ if (!localVars.has(propVariableName)) {
953
+ accessedGlobalVariables.add(propVariableName);
954
+ yield _ts('__VLS_ctx.');
955
+ }
946
956
  yield* generateCamelized(prop.exp.loc.source, prop.exp.loc.start.offset, caps_all);
947
957
  if (mode === 'normal') {
948
958
  yield _ts([
@@ -951,18 +961,17 @@ function* generate(ts, compilerOptions, vueCompilerOptions, template, shouldGene
951
961
  prop.exp.loc.end.offset,
952
962
  (0, utils_1.disableAllFeatures)({
953
963
  __hint: {
954
- setting: 'vue.inlayHints.vbindShorthand',
964
+ setting: 'vue.inlayHints.vBindShorthand',
955
965
  label: `="${propVariableName}"`,
956
966
  tooltip: [
957
967
  `This is a shorthand for \`${prop.exp.loc.source}="${propVariableName}"\`.`,
958
- 'To hide this hint, set `vue.inlayHints.vbindShorthand` to `false` in IDE settings.',
968
+ 'To hide this hint, set `vue.inlayHints.vBindShorthand` to `false` in IDE settings.',
959
969
  '[More info](https://github.com/vuejs/core/pull/9451)',
960
970
  ].join('\n\n'),
961
971
  },
962
972
  })
963
973
  ]);
964
974
  }
965
- accessedGlobalVariables.add(propVariableName);
966
975
  }
967
976
  }
968
977
  }
@@ -983,8 +992,9 @@ function* generate(ts, compilerOptions, vueCompilerOptions, template, shouldGene
983
992
  || (prop.name === 'style' && ++styleAttrNum >= 2)
984
993
  || (prop.name === 'class' && ++classAttrNum >= 2)
985
994
  || (prop.name === 'name' && node.tag === 'slot') // #2308
986
- )
995
+ ) {
987
996
  continue;
997
+ }
988
998
  if (vueCompilerOptions.target < 3
989
999
  && (node.tag === 'transition' || node.tag === 'Transition')
990
1000
  && prop.name === 'persisted') {
@@ -1262,8 +1272,9 @@ function* generate(ts, compilerOptions, vueCompilerOptions, template, shouldGene
1262
1272
  }
1263
1273
  }
1264
1274
  function* generateExtraAutoImport() {
1265
- if (!tempVars.length)
1275
+ if (!tempVars.length) {
1266
1276
  return;
1277
+ }
1267
1278
  yield _ts('// @ts-ignore\n'); // #2304
1268
1279
  yield _ts('[');
1269
1280
  for (const _vars of tempVars) {
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const parseSfc_1 = require("../utils/parseSfc");
4
- const plugin = (_ctx) => {
4
+ const plugin = _ctx => {
5
5
  return {
6
6
  version: 2,
7
7
  parseSFC(_fileName, content) {
@@ -9,7 +9,7 @@ const utils_1 = require("../generators/utils");
9
9
  const scriptRanges_1 = require("../parsers/scriptRanges");
10
10
  const scriptSetupRanges_1 = require("../parsers/scriptSetupRanges");
11
11
  exports.tsCodegen = new WeakMap();
12
- const plugin = (ctx) => {
12
+ const plugin = ctx => {
13
13
  return {
14
14
  version: 2,
15
15
  requiredCompilerOptions: [
@@ -126,8 +126,9 @@ function createTsx(fileName, _sfc, ctx) {
126
126
  return classes;
127
127
  });
128
128
  const generatedTemplate = (0, computeds_1.computed)(() => {
129
- if (!_sfc.template)
129
+ if (!_sfc.template) {
130
130
  return;
131
+ }
131
132
  const tsCodes = [];
132
133
  const tsFormatCodes = [];
133
134
  const inlineCssCodes = [];
package/lib/plugins.js CHANGED
@@ -27,7 +27,9 @@ function getDefaultVueLanguagePlugins(pluginContext) {
27
27
  const pluginInstances = plugins
28
28
  .map(plugin => {
29
29
  try {
30
- return plugin(pluginContext);
30
+ const instance = plugin(pluginContext);
31
+ instance.name ??= plugin.__moduleName;
32
+ return instance;
31
33
  }
32
34
  catch (err) {
33
35
  console.warn('[Vue] Failed to create plugin', err);
@@ -39,10 +41,10 @@ function getDefaultVueLanguagePlugins(pluginContext) {
39
41
  const bOrder = b.order ?? 0;
40
42
  return aOrder - bOrder;
41
43
  });
42
- return pluginInstances.filter((plugin) => {
44
+ return pluginInstances.filter(plugin => {
43
45
  const valid = plugin.version === types_1.pluginVersion;
44
46
  if (!valid) {
45
- console.warn(`[Vue] Plugin ${JSON.stringify(plugin.name)} API version incompatible, expected ${JSON.stringify(types_1.pluginVersion)} but got ${JSON.stringify(plugin.version)}`);
47
+ console.warn(`[Vue] Plugin ${JSON.stringify(plugin.name)} API version incompatible, expected "${types_1.pluginVersion}" but got "${plugin.version}".`);
46
48
  }
47
49
  return valid;
48
50
  });
@@ -103,8 +103,9 @@ function walkIdentifiers(ts, node, ast, cb, localVars, blockVars = [], isRoot =
103
103
  for (const varName of blockVars) {
104
104
  localVars.set(varName, (localVars.get(varName) ?? 0) + 1);
105
105
  }
106
- if (node.initializer)
106
+ if (node.initializer) {
107
107
  walkIdentifiers(ts, node.initializer, ast, cb, localVars, blockVars, false);
108
+ }
108
109
  }
109
110
  else if (ts.isArrowFunction(node) || ts.isFunctionExpression(node)) {
110
111
  const functionArgs = [];
@@ -114,11 +115,13 @@ function walkIdentifiers(ts, node, ast, cb, localVars, blockVars = [], isRoot =
114
115
  walkIdentifiers(ts, param.type, ast, cb, localVars, blockVars, false);
115
116
  }
116
117
  }
117
- for (const varName of functionArgs)
118
+ for (const varName of functionArgs) {
118
119
  localVars.set(varName, (localVars.get(varName) ?? 0) + 1);
120
+ }
119
121
  walkIdentifiers(ts, node.body, ast, cb, localVars, blockVars, false);
120
- for (const varName of functionArgs)
122
+ for (const varName of functionArgs) {
121
123
  localVars.set(varName, localVars.get(varName) - 1);
124
+ }
122
125
  }
123
126
  else if (ts.isObjectLiteralExpression(node)) {
124
127
  for (const prop of node.properties) {
package/lib/utils/ts.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type * as ts from 'typescript';
2
2
  import type { VueCompilerOptions } from '../types';
3
3
  export type ParsedCommandLine = ts.ParsedCommandLine & {
4
- vueOptions: Partial<VueCompilerOptions>;
4
+ vueOptions: VueCompilerOptions;
5
5
  };
6
6
  export declare function createParsedCommandLineByJson(ts: typeof import('typescript'), parseConfigHost: ts.ParseConfigHost, rootDir: string, json: any, configFileName?: string): ParsedCommandLine;
7
7
  export declare function createParsedCommandLine(ts: typeof import('typescript'), parseConfigHost: ts.ParseConfigHost, tsConfigPath: string): ParsedCommandLine;
package/lib/utils/ts.js CHANGED
@@ -15,7 +15,8 @@ function createParsedCommandLineByJson(ts, parseConfigHost, rootDir, json, confi
15
15
  }
16
16
  catch (err) { }
17
17
  }
18
- const parsed = ts.parseJsonConfigFileContent(json, proxyHost.host, rootDir, {}, configFileName, undefined, (vueOptions.extensions ?? ['.vue']).map(extension => ({
18
+ const resolvedVueOptions = resolveVueCompilerOptions(vueOptions);
19
+ const parsed = ts.parseJsonConfigFileContent(json, proxyHost.host, rootDir, {}, configFileName, undefined, resolvedVueOptions.extensions.map(extension => ({
19
20
  extension: extension.slice(1),
20
21
  isMixedContent: true,
21
22
  scriptKind: ts.ScriptKind.Deferred,
@@ -26,7 +27,7 @@ function createParsedCommandLineByJson(ts, parseConfigHost, rootDir, json, confi
26
27
  parsed.options.outDir = undefined;
27
28
  return {
28
29
  ...parsed,
29
- vueOptions,
30
+ vueOptions: resolvedVueOptions,
30
31
  };
31
32
  }
32
33
  exports.createParsedCommandLineByJson = createParsedCommandLineByJson;
@@ -45,7 +46,8 @@ function createParsedCommandLine(ts, parseConfigHost, tsConfigPath) {
45
46
  }
46
47
  catch (err) { }
47
48
  }
48
- const parsed = ts.parseJsonSourceFileConfigFileContent(config, proxyHost.host, path.dirname(tsConfigPath), {}, tsConfigPath, undefined, (vueOptions.extensions ?? ['.vue']).map(extension => ({
49
+ const resolvedVueOptions = resolveVueCompilerOptions(vueOptions);
50
+ const parsed = ts.parseJsonSourceFileConfigFileContent(config, proxyHost.host, path.dirname(tsConfigPath), {}, tsConfigPath, undefined, resolvedVueOptions.extensions.map(extension => ({
49
51
  extension: extension.slice(1),
50
52
  isMixedContent: true,
51
53
  scriptKind: ts.ScriptKind.Deferred,
@@ -56,7 +58,7 @@ function createParsedCommandLine(ts, parseConfigHost, tsConfigPath) {
56
58
  parsed.options.outDir = undefined;
57
59
  return {
58
60
  ...parsed,
59
- vueOptions,
61
+ vueOptions: resolvedVueOptions,
60
62
  };
61
63
  }
62
64
  catch (err) {
@@ -118,7 +120,9 @@ function getPartialVueCompilerOptions(ts, tsConfigSourceFile) {
118
120
  try {
119
121
  const resolvedPath = resolvePath(pluginPath);
120
122
  if (resolvedPath) {
121
- return require(resolvedPath);
123
+ const plugin = require(resolvedPath);
124
+ plugin.__moduleName = pluginPath;
125
+ return plugin;
122
126
  }
123
127
  else {
124
128
  console.warn('[Vue] Load plugin failed:', pluginPath);
@@ -9,7 +9,7 @@ const compile = (template, options = {}) => {
9
9
  }
10
10
  const onError = options.onError;
11
11
  const onWarn = options.onWarn;
12
- options.onError = (error) => {
12
+ options.onError = error => {
13
13
  if (error.code === 33 // :key binding allowed in v-for template child in vue 2
14
14
  || error.code === 29 // fix https://github.com/vuejs/language-tools/issues/1638
15
15
  ) {
@@ -57,7 +57,7 @@ const compile = (template, options = {}) => {
57
57
  };
58
58
  exports.compile = compile;
59
59
  function baseCompile(template, options = {}) {
60
- const onError = options.onError || ((error) => { throw error; });
60
+ const onError = options.onError || (error => { throw error; });
61
61
  const isModuleMode = options.mode === 'module';
62
62
  const prefixIdentifiers = options.prefixIdentifiers === true || isModuleMode;
63
63
  if (!prefixIdentifiers && options.cacheHandlers) {
@@ -1,4 +1,4 @@
1
- import { Mapping } from '@volar/language-core';
1
+ import { CodeMapping } from '@volar/language-core';
2
2
  import type * as ts from 'typescript';
3
- import type { Sfc, VueCodeInformation } from '../types';
4
- export declare function computedMappings(snapshot: () => ts.IScriptSnapshot, sfc: Sfc): () => Mapping<VueCodeInformation>[];
3
+ import type { Sfc } from '../types';
4
+ export declare function computedMappings(snapshot: () => ts.IScriptSnapshot, sfc: Sfc): () => CodeMapping[];
@@ -18,9 +18,9 @@ function computedMappings(snapshot, sfc) {
18
18
  (0, language_core_1.replaceSourceRange)(str, undefined, block.startTagEnd, block.endTagStart, '\n\n');
19
19
  }
20
20
  }
21
- return str
21
+ const mappings = str
22
22
  .filter(s => typeof s !== 'string')
23
- .map((m) => {
23
+ .map(m => {
24
24
  const text = m[0];
25
25
  const start = m[2];
26
26
  return {
@@ -30,6 +30,36 @@ function computedMappings(snapshot, sfc) {
30
30
  data: m[3],
31
31
  };
32
32
  });
33
+ // fix folding range end position failed to mapping
34
+ for (const block of [
35
+ sfc.script,
36
+ sfc.scriptSetup,
37
+ sfc.template,
38
+ ...sfc.styles,
39
+ ...sfc.customBlocks,
40
+ ]) {
41
+ const offsets = [];
42
+ if (block) {
43
+ let content = block.content;
44
+ if (content.endsWith('\r\n')) {
45
+ content = content.slice(0, -2);
46
+ }
47
+ else if (content.endsWith('\n')) {
48
+ content = content.slice(0, -1);
49
+ }
50
+ const offset = content.lastIndexOf('\n') + 1;
51
+ offsets.push(block.startTagEnd + offset);
52
+ }
53
+ if (offsets.length) {
54
+ mappings.push({
55
+ sourceOffsets: offsets,
56
+ generatedOffsets: offsets,
57
+ lengths: offsets.map(() => 0),
58
+ data: (0, utils_1.disableAllFeatures)({ structure: true }),
59
+ });
60
+ }
61
+ }
62
+ return mappings;
33
63
  });
34
64
  }
35
65
  exports.computedMappings = computedMappings;
@@ -14,12 +14,12 @@ export declare class VueGeneratedCode implements VirtualCode {
14
14
  _snapshot: Signal<ts.IScriptSnapshot>;
15
15
  getVueSfc: () => import("@vue/compiler-sfc").SFCParseResult | undefined;
16
16
  sfc: import("../types").Sfc;
17
- getMappings: () => import("@volar/language-core").Mapping<import("../types").VueCodeInformation>[];
17
+ getMappings: () => import("@volar/language-core").CodeMapping[];
18
18
  getEmbeddedCodes: () => VirtualCode[];
19
19
  codegenStacks: Stack[];
20
20
  get embeddedCodes(): VirtualCode[];
21
21
  get snapshot(): ts.IScriptSnapshot;
22
- get mappings(): import("@volar/language-core").Mapping<import("../types").VueCodeInformation>[];
22
+ get mappings(): import("@volar/language-core").CodeMapping[];
23
23
  constructor(fileName: string, languageId: string, initSnapshot: ts.IScriptSnapshot, vueCompilerOptions: VueCompilerOptions, plugins: ReturnType<VueLanguagePlugin>[], ts: typeof import('typescript'), codegenStack: boolean);
24
24
  update(newSnapshot: ts.IScriptSnapshot): void;
25
25
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vue/language-core",
3
- "version": "2.0.5",
3
+ "version": "2.0.7",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "**/*.js",
@@ -12,7 +12,7 @@
12
12
  "directory": "packages/language-core"
13
13
  },
14
14
  "dependencies": {
15
- "@volar/language-core": "~2.1.1",
15
+ "@volar/language-core": "~2.1.3",
16
16
  "@vue/compiler-dom": "^3.4.0",
17
17
  "@vue/shared": "^3.4.0",
18
18
  "computeds": "^0.0.1",
@@ -34,5 +34,5 @@
34
34
  "optional": true
35
35
  }
36
36
  },
37
- "gitHead": "62b4fcb0d3f7153b5b2f5571af32f519117d8466"
37
+ "gitHead": "4a37e8f3ebcf31ecfd2ea627f7611d5990ec5df6"
38
38
  }