Closed AlbertMarashi closed 2 months ago
Whoops sorry, couldn't figure out how to escape that code
Linking for reference https://github.com/sveltejs/language-tools/issues/2465
There's no template literal syntax there, so I wouldn't parse it as a template literal. I think it's reasonable to provide new rule that you're already working with.
@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? Does getting type information using template literals change anything?
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.
Are you talking about type information and not the AST? Does getting type information using template literals change anything?
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 ee
isn't a stringifiable type, but in the latter it does (and should)
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. It is implemented to revert to the original code when converting it to AST, so using template literals in virtual code will not improve the behavior of that rule.
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
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