Skip to content

Commit

Permalink
Drop support for vue-i18n v8 syntax (#616)
Browse files Browse the repository at this point in the history
* Drop support for vue-i18n v8 syntax

* Create cyan-needles-sniff.md

* fix
  • Loading branch information
ota-meshi authored Mar 5, 2025
1 parent 830c5f8 commit 1d4beb7
Show file tree
Hide file tree
Showing 14 changed files with 60 additions and 1,445 deletions.
5 changes: 5 additions & 0 deletions .changeset/cyan-needles-sniff.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@intlify/eslint-plugin-vue-i18n": major
---

Drop support for vue-i18n v8 syntax
2 changes: 1 addition & 1 deletion docs/.vitepress/components/eslint-code-block.vue
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ export default {
},
messageSyntaxVersion: {
type: String,
default: '^9'
default: '^11'
}
},
Expand Down
4 changes: 2 additions & 2 deletions docs/started.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ export default [

// Specify the version of `vue-i18n` you are using.
// If not specified, the message will be parsed twice.
messageSyntaxVersion: '^9.0.0'
messageSyntaxVersion: '^11.0.0'
}
}
}
Expand Down Expand Up @@ -144,7 +144,7 @@ module.exports = {

// Specify the version of `vue-i18n` you are using.
// If not specified, the message will be parsed twice.
messageSyntaxVersion: '^9.0.0'
messageSyntaxVersion: '^11.0.0'
}
}
}
Expand Down
58 changes: 2 additions & 56 deletions lib/rules/prefer-linked-key-with-paren.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import {
NodeTypes
} from '../utils/message-compiler/utils'
import { parse } from '../utils/message-compiler/parser'
import { parse as parseForV8 } from '../utils/message-compiler/parser-v8'
import { traverseNode } from '../utils/message-compiler/traverser'
import { getFilename, getSourceCode } from '../utils/compat'

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

function verifyForNewSyntax(
function verifySyntax(
message: string,
reportNode: JSONAST.JSONStringLiteral | YAMLAST.YAMLScalar,
getReportOffset: GetReportOffset
Expand Down Expand Up @@ -83,49 +82,6 @@ function create(context: RuleContext): RuleListener {
})
}

function verifyForV8(
message: string,
reportNode: JSONAST.JSONStringLiteral | YAMLAST.YAMLScalar,
getReportOffset: GetReportOffset
) {
const { ast, errors } = parseForV8(message)
if (errors.length) {
return
}
traverseNode(ast, node => {
if (node.type !== NodeTypes.LinkedKey) {
return
}
if (message[node.loc!.start.offset - 1] === '(') {
return
}
let range: [number, number] | null = null
const start = getReportOffset(node.loc!.start.offset)
const end = getReportOffset(node.loc!.end.offset)
if (start != null && end != null) {
range = [start, end]
}
context.report({
loc: range
? {
start: sourceCode.getLocFromIndex(range[0]),
end: sourceCode.getLocFromIndex(range[1])
}
: reportNode.loc,
message: 'The linked message key must be enclosed in parentheses.',
fix(fixer) {
if (!range) {
return null
}
return [
fixer.insertTextBeforeRange(range, '('),
fixer.insertTextAfterRange(range, ')')
]
}
})
})
}

function verifyMessage(
message: string,
reportNode: JSONAST.JSONStringLiteral | YAMLAST.YAMLScalar,
Expand All @@ -134,18 +90,8 @@ function create(context: RuleContext): RuleListener {
if (messageSyntaxVersions.reportIfMissingSetting()) {
return
}
const newSyntax = messageSyntaxVersions.v9 || messageSyntaxVersions.v10
const v8Syntax = messageSyntaxVersions.v8
if (newSyntax && v8Syntax) {
// This rule cannot support two versions in the same project.
return
}

if (newSyntax) {
verifyForNewSyntax(message, reportNode, getReportOffset)
} else if (v8Syntax) {
verifyForV8(message, reportNode, getReportOffset)
}
verifySyntax(message, reportNode, getReportOffset)
}

const createVisitorForJson = defineCreateVisitorForJson(verifyMessage)
Expand Down
19 changes: 7 additions & 12 deletions lib/rules/valid-message-syntax.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import {
} from '../utils/message-compiler/utils'
import { parse } from '../utils/message-compiler/parser'
import { parse as parseForV9 } from '../utils/message-compiler/parser-v9'
import { parse as parseForV8 } from '../utils/message-compiler/parser-v8'
import type { CompileError } from '@intlify/message-compiler'
import { createRule } from '../utils/rule'
import { getFilename, getSourceCode } from '../utils/compat'
Expand All @@ -28,19 +27,15 @@ function create(context: RuleContext): RuleListener {
const messageSyntaxVersions = getMessageSyntaxVersions(context)

function* extractMessageErrors(message: string) {
// v10 and v9 generate nearly identical errors so only one of them will be returned.
const errorsForV10OrV9: CompileError[] = []
if (messageSyntaxVersions.v10) {
errorsForV10OrV9.push(...parse(message).errors)
// v10/v11 and v9 generate nearly identical errors so only one of them will be returned.
const errors: CompileError[] = []
if (messageSyntaxVersions.v10 || messageSyntaxVersions.v11) {
errors.push(...parse(message).errors)
}
if (messageSyntaxVersions.v9 && !errorsForV10OrV9.length) {
errorsForV10OrV9.push(...parseForV9(message).errors)
}
yield* errorsForV10OrV9

if (messageSyntaxVersions.v8) {
yield* parseForV8(message).errors
if (messageSyntaxVersions.v9 && !errors.length) {
errors.push(...parseForV9(message).errors)
}
yield* errors
}
function verifyMessage(
message: string | number | undefined | null | boolean | bigint | RegExp,
Expand Down
6 changes: 1 addition & 5 deletions lib/utils/collect-linked-keys.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import { traverseNode } from './message-compiler/traverser'
import type { I18nLocaleMessageDictionary, RuleContext } from '../types'
import { parse } from './message-compiler/parser'
import { parse as parseForV9 } from './message-compiler/parser-v9'
import { parse as parseForV8 } from './message-compiler/parser-v8'
import type { MessageSyntaxVersions } from './message-compiler/utils'
import { NodeTypes } from './message-compiler/utils'
import { getMessageSyntaxVersions } from './message-compiler/utils'
Expand All @@ -28,15 +27,12 @@ function* extractUsedKeysFromLinks(
if (typeof value === 'object') {
yield* extractUsedKeysFromLinks(value, messageSyntaxVersions)
} else if (typeof value === 'string') {
if (messageSyntaxVersions.v10) {
if (messageSyntaxVersions.v10 || messageSyntaxVersions.v11) {
yield* extractUsedKeysFromAST(parse(value).ast)
}
if (messageSyntaxVersions.v9) {
yield* extractUsedKeysFromAST(parseForV9(value).ast)
}
if (messageSyntaxVersions.v8) {
yield* extractUsedKeysFromAST(parseForV8(value).ast)
}
}
}
}
Expand Down
Loading

0 comments on commit 1d4beb7

Please sign in to comment.