-
-
Notifications
You must be signed in to change notification settings - Fork 24
Mustache expressions should be wrapped in template literals for consistency with typescript eslint rules #558
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
(
${bar});
` for consistency with typescript eslint rules(
${bar}
);
for consistency with typescript eslint rules
(
${bar}
);
for consistency with typescript eslint rules(
${bar}
);
for consistency with typescript eslint rules
(
${bar}
);
for consistency with typescript eslint rules(
${bar});
for consistency with typescript eslint rules
(
${bar});
for consistency with typescript eslint rules(
${bar});
`` for consistency with typescript eslint rules
(
${bar});
`` for consistency with typescript eslint rules(\
${bar}\);
for consistency with typescript eslint rules
(\
${bar}\);
for consistency with typescript eslint rules(\
${bar}\);
`` for consistency with typescript eslint rules
(\
${bar}\);
`` for consistency with typescript eslint rules (\
${bar}\);
`` for consistency with typescript eslint rules
(\
${bar}\);
`` for consistency with typescript eslint rules (\
${bar}\);
` for consistency with typescript eslint rules
(\
${bar}\);
` for consistency with typescript eslint rules (
${bar}
);
for consistency with typescript eslint rules
(
${bar}
);
for consistency with typescript eslint rules
Whoops sorry, couldn't figure out how to escape that code |
Linking for reference sveltejs/language-tools#2465 |
There's no template literal syntax there, so I wouldn't parse it as a template literal. |
@ota-meshi to clarify the reasoning for this is that mustache expressions are treated as strings to render in the DOM. Therefore it makes sense to wrap them in template expressions for the purposes that typescript can understand that the return value is going to be a string. This is logically the approach that would make sense in the virtual script code, I think the entire render code should be effectively viewed as essentially one big template literal |
Are you talking about type information and not the AST? I think all ESLint rules that parse template literals will report incorrectly if we assign the AST node of a template literal to a part that is not a template literal. |
I'm specifically talking about the semantics of virtual code. Array.from(array).forEach((e) => {
(ee);
}); has different semantics to Array.from(array).forEach((e) => {
(`${ee}`);
}); In the former case, eslint doesn't care that Ideally, we want to prevent situations where the following is treated as valid code <a href="/foo/[object Object]">..</a> |
Virtual code is a mechanism for obtaining type information in TypeScript. |
Before You File a Bug Report Please Confirm You Have Done The Following...
*.svelte
file linting does not work with the parser alone. You should also use eslint-plugin-svelte with it.)What version of ESLint are you using?
0.41.0
What version of
eslint-plugin-svelte
andsvelte-eslint-parser
are you using?What did you do?
The following is a major footgun and surface area for bugs.
Will result in
Even in situations such as
Hello { obj }
We get
There's exactly zero times that I've desired this behavior & almost always a surface area for bugs when refactoring props, types and etc.
This can quite easily occur throughout projects during refactoring or even just developer oversight. We should prevent this from occurring.
I view this as a quite serious typing issue, with no easy apparent remedies.
What did you expect to happen?
making
eslint-plugin-svelte
capture these issues when using rules such as:This, requires values to be wrapped in template strings, so that typescript knows we are attempting to treat a given value as a string to be displayed
What actually happened?
Gets turned into:
When it should be
Link to GitHub Repo with Minimal Reproducible Example
NA
Additional comments
No response
The text was updated successfully, but these errors were encountered: