]>
git.proxmox.com Git - pve-eslint.git/blob - eslint/lib/rules/template-curly-spacing.js
5133a54539cb32e5dded906757d5c3565a328d99
2 * @fileoverview Rule to enforce spacing around embedded expressions of template strings
3 * @author Toru Nagashima
8 //------------------------------------------------------------------------------
10 //------------------------------------------------------------------------------
12 const astUtils
= require("./utils/ast-utils");
14 //------------------------------------------------------------------------------
16 //------------------------------------------------------------------------------
23 description
: "require or disallow spacing around embedded expressions of template strings",
25 url
: "https://eslint.org/docs/rules/template-curly-spacing"
28 fixable
: "whitespace",
31 { enum: ["always", "never"] }
34 expectedBefore
: "Expected space(s) before '}'.",
35 expectedAfter
: "Expected space(s) after '${'.",
36 unexpectedBefore
: "Unexpected space(s) before '}'.",
37 unexpectedAfter
: "Unexpected space(s) after '${'."
42 const sourceCode
= context
.getSourceCode();
43 const always
= context
.options
[0] === "always";
46 * Checks spacing before `}` of a given token.
47 * @param {Token} token A token to check. This is a Template token.
50 function checkSpacingBefore(token
) {
51 if (!token
.value
.startsWith("}")) {
52 return; // starts with a backtick, this is the first template element in the template literal
55 const prevToken
= sourceCode
.getTokenBefore(token
, { includeComments
: true }),
56 hasSpace
= sourceCode
.isSpaceBetween(prevToken
, token
);
58 if (!astUtils
.isTokenOnSameLine(prevToken
, token
)) {
62 if (always
&& !hasSpace
) {
65 start
: token
.loc
.start
,
67 line
: token
.loc
.start
.line
,
68 column
: token
.loc
.start
.column
+ 1
71 messageId
: "expectedBefore",
72 fix
: fixer
=> fixer
.insertTextBefore(token
, " ")
76 if (!always
&& hasSpace
) {
79 start
: prevToken
.loc
.end
,
82 messageId
: "unexpectedBefore",
83 fix
: fixer
=> fixer
.removeRange([prevToken
.range
[1], token
.range
[0]])
89 * Checks spacing after `${` of a given token.
90 * @param {Token} token A token to check. This is a Template token.
93 function checkSpacingAfter(token
) {
94 if (!token
.value
.endsWith("${")) {
95 return; // ends with a backtick, this is the last template element in the template literal
98 const nextToken
= sourceCode
.getTokenAfter(token
, { includeComments
: true }),
99 hasSpace
= sourceCode
.isSpaceBetween(token
, nextToken
);
101 if (!astUtils
.isTokenOnSameLine(token
, nextToken
)) {
105 if (always
&& !hasSpace
) {
109 line
: token
.loc
.end
.line
,
110 column
: token
.loc
.end
.column
- 2
114 messageId
: "expectedAfter",
115 fix
: fixer
=> fixer
.insertTextAfter(token
, " ")
119 if (!always
&& hasSpace
) {
122 start
: token
.loc
.end
,
123 end
: nextToken
.loc
.start
125 messageId
: "unexpectedAfter",
126 fix
: fixer
=> fixer
.removeRange([token
.range
[1], nextToken
.range
[0]])
132 TemplateElement(node
) {
133 const token
= sourceCode
.getFirstToken(node
);
135 checkSpacingBefore(token
);
136 checkSpacingAfter(token
);