Skip to content

Commit 2334ff8

Browse files
committed
fix: fix output quote styles in codemods
The recast print utility prefers double quotes by default, this may fail many users' eslint check, so we have to implement a detection utility to tell if double quotes are actually needed. Template literals are also converted to string literals, to make things easier for future iterations.
1 parent ebdb142 commit 2334ff8

File tree

10 files changed

+26
-20
lines changed

10 files changed

+26
-20
lines changed

packages/@vue/cli-plugin-babel/codemods/__testfixtures__/customConfig.input.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module.exports = {
22
presets: [
3-
["@vue/app", {
3+
['@vue/app', {
44
polyfills: []
55
}]
66
]

packages/@vue/cli-plugin-babel/codemods/__testfixtures__/customConfig.output.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module.exports = {
22
presets: [
3-
["@vue/cli-plugin-babel/preset", {
3+
['@vue/cli-plugin-babel/preset', {
44
polyfills: []
55
}]
66
]
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module.exports = {
2-
presets: ["@vue/app"]
2+
presets: ['@vue/app']
33
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module.exports = {
2-
presets: ["@vue/cli-plugin-babel/preset"]
2+
presets: ['@vue/cli-plugin-babel/preset']
33
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = {
2+
presets: ["@vue/app"]
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = {
2+
presets: ["@vue/cli-plugin-babel/preset"]
3+
}

packages/@vue/cli-plugin-babel/codemods/__testfixtures__/require.input.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const config = {
22
presets: [
3-
[require("@vue/babel-preset-app"), {
3+
[require('@vue/babel-preset-app'), {
44
polyfills: []
55
}]
66
]

packages/@vue/cli-plugin-babel/codemods/__testfixtures__/require.output.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const config = {
22
presets: [
3-
[require("@vue/cli-plugin-babel/preset"), {
3+
[require('@vue/cli-plugin-babel/preset'), {
44
polyfills: []
55
}]
66
]
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module.exports = {
2-
presets: [`@vue/cli-plugin-babel/preset`]
2+
presets: ['@vue/cli-plugin-babel/preset']
33
}

packages/@vue/cli-plugin-babel/codemods/usePluginPreset.js

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,14 @@ module.exports = function (fileInfo, api) {
22
const j = api.jscodeshift
33
const root = j(fileInfo.source)
44

5+
const useDoubleQuote = root.find(j.Literal).some(({ node }) => node.raw.startsWith('"'))
6+
57
root
68
.find(j.Literal, { value: '@vue/app' })
7-
.forEach(({ node }) => {
8-
node.value = '@vue/cli-plugin-babel/preset'
9-
})
9+
.replaceWith(j.stringLiteral('@vue/cli-plugin-babel/preset'))
1010
root
1111
.find(j.Literal, { value: '@vue/babel-preset-app' })
12-
.forEach(({ node }) => {
13-
node.value = '@vue/cli-plugin-babel/preset'
14-
})
12+
.replaceWith(j.stringLiteral('@vue/cli-plugin-babel/preset'))
1513

1614
const templateLiterals = root
1715
.find(j.TemplateLiteral, {
@@ -24,18 +22,20 @@ module.exports = function (fileInfo, api) {
2422
cooked: '@vue/app'
2523
}
2624
})
27-
.forEach(({ node }) => {
28-
node.value = { cooked: '@vue/cli-plugin-babel/preset', raw: '@vue/cli-plugin-babel/preset' }
29-
})
25+
.closest(j.TemplateLiteral)
26+
.replaceWith(j.stringLiteral('@vue/cli-plugin-babel/preset'))
27+
3028
templateLiterals
3129
.find(j.TemplateElement, {
3230
value: {
3331
cooked: '@vue/babel-preset-app'
3432
}
3533
})
36-
.forEach(({ node }) => {
37-
node.value = { cooked: '@vue/cli-plugin-babel/preset', raw: '@vue/cli-plugin-babel/preset' }
38-
})
34+
.closest(j.TemplateLiteral)
35+
.replaceWith(j.stringLiteral('@vue/cli-plugin-babel/preset'))
3936

40-
return root.toSource({ lineTerminator: '\n' })
37+
return root.toSource({
38+
lineTerminator: '\n',
39+
quote: useDoubleQuote ? 'double' : 'single'
40+
})
4141
}

0 commit comments

Comments
 (0)