Skip to content

Commit 1d4beb7

Browse files
authored
Drop support for vue-i18n v8 syntax (#616)
* Drop support for vue-i18n v8 syntax * Create cyan-needles-sniff.md * fix
1 parent 830c5f8 commit 1d4beb7

14 files changed

+60
-1445
lines changed

.changeset/cyan-needles-sniff.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@intlify/eslint-plugin-vue-i18n": major
3+
---
4+
5+
Drop support for vue-i18n v8 syntax

docs/.vitepress/components/eslint-code-block.vue

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export default {
5858
},
5959
messageSyntaxVersion: {
6060
type: String,
61-
default: '^9'
61+
default: '^11'
6262
}
6363
},
6464

docs/started.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export default [
7373

7474
// Specify the version of `vue-i18n` you are using.
7575
// If not specified, the message will be parsed twice.
76-
messageSyntaxVersion: '^9.0.0'
76+
messageSyntaxVersion: '^11.0.0'
7777
}
7878
}
7979
}
@@ -144,7 +144,7 @@ module.exports = {
144144

145145
// Specify the version of `vue-i18n` you are using.
146146
// If not specified, the message will be parsed twice.
147-
messageSyntaxVersion: '^9.0.0'
147+
messageSyntaxVersion: '^11.0.0'
148148
}
149149
}
150150
}

lib/rules/prefer-linked-key-with-paren.ts

+2-56
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import {
1919
NodeTypes
2020
} from '../utils/message-compiler/utils'
2121
import { parse } from '../utils/message-compiler/parser'
22-
import { parse as parseForV8 } from '../utils/message-compiler/parser-v8'
2322
import { traverseNode } from '../utils/message-compiler/traverser'
2423
import { getFilename, getSourceCode } from '../utils/compat'
2524

@@ -42,7 +41,7 @@ function create(context: RuleContext): RuleListener {
4241
const sourceCode = getSourceCode(context)
4342
const messageSyntaxVersions = getMessageSyntaxVersions(context)
4443

45-
function verifyForNewSyntax(
44+
function verifySyntax(
4645
message: string,
4746
reportNode: JSONAST.JSONStringLiteral | YAMLAST.YAMLScalar,
4847
getReportOffset: GetReportOffset
@@ -83,49 +82,6 @@ function create(context: RuleContext): RuleListener {
8382
})
8483
}
8584

86-
function verifyForV8(
87-
message: string,
88-
reportNode: JSONAST.JSONStringLiteral | YAMLAST.YAMLScalar,
89-
getReportOffset: GetReportOffset
90-
) {
91-
const { ast, errors } = parseForV8(message)
92-
if (errors.length) {
93-
return
94-
}
95-
traverseNode(ast, node => {
96-
if (node.type !== NodeTypes.LinkedKey) {
97-
return
98-
}
99-
if (message[node.loc!.start.offset - 1] === '(') {
100-
return
101-
}
102-
let range: [number, number] | null = null
103-
const start = getReportOffset(node.loc!.start.offset)
104-
const end = getReportOffset(node.loc!.end.offset)
105-
if (start != null && end != null) {
106-
range = [start, end]
107-
}
108-
context.report({
109-
loc: range
110-
? {
111-
start: sourceCode.getLocFromIndex(range[0]),
112-
end: sourceCode.getLocFromIndex(range[1])
113-
}
114-
: reportNode.loc,
115-
message: 'The linked message key must be enclosed in parentheses.',
116-
fix(fixer) {
117-
if (!range) {
118-
return null
119-
}
120-
return [
121-
fixer.insertTextBeforeRange(range, '('),
122-
fixer.insertTextAfterRange(range, ')')
123-
]
124-
}
125-
})
126-
})
127-
}
128-
12985
function verifyMessage(
13086
message: string,
13187
reportNode: JSONAST.JSONStringLiteral | YAMLAST.YAMLScalar,
@@ -134,18 +90,8 @@ function create(context: RuleContext): RuleListener {
13490
if (messageSyntaxVersions.reportIfMissingSetting()) {
13591
return
13692
}
137-
const newSyntax = messageSyntaxVersions.v9 || messageSyntaxVersions.v10
138-
const v8Syntax = messageSyntaxVersions.v8
139-
if (newSyntax && v8Syntax) {
140-
// This rule cannot support two versions in the same project.
141-
return
142-
}
14393

144-
if (newSyntax) {
145-
verifyForNewSyntax(message, reportNode, getReportOffset)
146-
} else if (v8Syntax) {
147-
verifyForV8(message, reportNode, getReportOffset)
148-
}
94+
verifySyntax(message, reportNode, getReportOffset)
14995
}
15096

15197
const createVisitorForJson = defineCreateVisitorForJson(verifyMessage)

lib/rules/valid-message-syntax.ts

+7-12
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import {
1515
} from '../utils/message-compiler/utils'
1616
import { parse } from '../utils/message-compiler/parser'
1717
import { parse as parseForV9 } from '../utils/message-compiler/parser-v9'
18-
import { parse as parseForV8 } from '../utils/message-compiler/parser-v8'
1918
import type { CompileError } from '@intlify/message-compiler'
2019
import { createRule } from '../utils/rule'
2120
import { getFilename, getSourceCode } from '../utils/compat'
@@ -28,19 +27,15 @@ function create(context: RuleContext): RuleListener {
2827
const messageSyntaxVersions = getMessageSyntaxVersions(context)
2928

3029
function* extractMessageErrors(message: string) {
31-
// v10 and v9 generate nearly identical errors so only one of them will be returned.
32-
const errorsForV10OrV9: CompileError[] = []
33-
if (messageSyntaxVersions.v10) {
34-
errorsForV10OrV9.push(...parse(message).errors)
30+
// v10/v11 and v9 generate nearly identical errors so only one of them will be returned.
31+
const errors: CompileError[] = []
32+
if (messageSyntaxVersions.v10 || messageSyntaxVersions.v11) {
33+
errors.push(...parse(message).errors)
3534
}
36-
if (messageSyntaxVersions.v9 && !errorsForV10OrV9.length) {
37-
errorsForV10OrV9.push(...parseForV9(message).errors)
38-
}
39-
yield* errorsForV10OrV9
40-
41-
if (messageSyntaxVersions.v8) {
42-
yield* parseForV8(message).errors
35+
if (messageSyntaxVersions.v9 && !errors.length) {
36+
errors.push(...parseForV9(message).errors)
4337
}
38+
yield* errors
4439
}
4540
function verifyMessage(
4641
message: string | number | undefined | null | boolean | bigint | RegExp,

lib/utils/collect-linked-keys.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { traverseNode } from './message-compiler/traverser'
77
import type { I18nLocaleMessageDictionary, RuleContext } from '../types'
88
import { parse } from './message-compiler/parser'
99
import { parse as parseForV9 } from './message-compiler/parser-v9'
10-
import { parse as parseForV8 } from './message-compiler/parser-v8'
1110
import type { MessageSyntaxVersions } from './message-compiler/utils'
1211
import { NodeTypes } from './message-compiler/utils'
1312
import { getMessageSyntaxVersions } from './message-compiler/utils'
@@ -28,15 +27,12 @@ function* extractUsedKeysFromLinks(
2827
if (typeof value === 'object') {
2928
yield* extractUsedKeysFromLinks(value, messageSyntaxVersions)
3029
} else if (typeof value === 'string') {
31-
if (messageSyntaxVersions.v10) {
30+
if (messageSyntaxVersions.v10 || messageSyntaxVersions.v11) {
3231
yield* extractUsedKeysFromAST(parse(value).ast)
3332
}
3433
if (messageSyntaxVersions.v9) {
3534
yield* extractUsedKeysFromAST(parseForV9(value).ast)
3635
}
37-
if (messageSyntaxVersions.v8) {
38-
yield* extractUsedKeysFromAST(parseForV8(value).ast)
39-
}
4036
}
4137
}
4238
}

0 commit comments

Comments
 (0)