refactor: Lint for no interpolation in regular string (#5060) (no-changelog)

*  Create rule `no-interpolation-in-regular-string`

* 👕 Enable rule

*  Run rule (no issues) and add exception

*  Simplify regex

To account for expressions and to make it less expensive
This commit is contained in:
Iván Ovejero 2022-12-29 14:24:19 +01:00 committed by GitHub
parent ba0fd8a310
commit 0b47f9ce4e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 0 deletions

View file

@ -341,6 +341,8 @@ const config = (module.exports = {
'n8n-local-rules/no-unneeded-backticks': 'error', 'n8n-local-rules/no-unneeded-backticks': 'error',
'n8n-local-rules/no-interpolation-in-regular-string': 'error',
// ****************************************************************** // ******************************************************************
// overrides to base ruleset // overrides to base ruleset
// ****************************************************************** // ******************************************************************

View file

@ -139,6 +139,36 @@ module.exports = {
}; };
}, },
}, },
'no-interpolation-in-regular-string': {
meta: {
type: 'problem',
docs: {
description:
'String interpolation `${...}` requires backticks, not single or double quotes.',
recommended: 'error',
},
messages: {
useBackticks: 'Use backticks to interpolate',
},
fixable: 'code',
},
create(context) {
return {
Literal(node) {
if (typeof node.value !== 'string') return;
if (/\$\{/.test(node.value)) {
context.report({
messageId: 'useBackticks',
node,
fix: (fixer) => fixer.replaceText(node, `\`${node.value}\``),
});
}
},
};
},
},
}; };
const isJsonParseCall = (node) => const isJsonParseCall = (node) =>

View file

@ -6,6 +6,7 @@ import { completeFromList, snippetCompletion } from '@codemirror/autocomplete';
*/ */
export const jsSnippets = completeFromList([ export const jsSnippets = completeFromList([
...snippets.filter((snippet) => snippet.label !== 'class'), ...snippets.filter((snippet) => snippet.label !== 'class'),
// eslint-disable-next-line n8n-local-rules/no-interpolation-in-regular-string
snippetCompletion('console.log(${arg})', { label: 'console.log()' }), snippetCompletion('console.log(${arg})', { label: 'console.log()' }),
snippetCompletion('DateTime', { label: 'DateTime' }), snippetCompletion('DateTime', { label: 'DateTime' }),
snippetCompletion('Interval', { label: 'Interval' }), snippetCompletion('Interval', { label: 'Interval' }),