-
-
Notifications
You must be signed in to change notification settings - Fork 4.2k
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
Support Angular @Component
decorator alias
#16256
Comments
Regarding the open PR, Wouldn’t it be better to change the code understand any alias name instead of hard coding these Page and Layout names? I haven’t seen this convention in Angular ecosystem. I don’t doubt that it exists but I feel like that it isn’t something that is regarded standard way. And prettier would need to start to add all the aliases that people request. I could be wrong and this is something that Angular is promoting in their style guide. If that it’s the case, then this change makes a lot sense. |
@rubiesonthesky I have updated the code, now it will support any alias name :) |
Page
and Layout
aliases for Angular @Component
decorator @Component
decorator alias
I am against adding this feature. But I am not familiar with Angular, so let me ask a question. Is this rule common among people who write Angular? Or is it only needed by you and your team? |
@sosukesuzuki This is not an Angular feature and it will not affect the way you write the code, which means you can still use the
The common rule, or let's say a good practice among people who write code(doesn't matter which language/technology) is to have a good naming: "A good name should give you a good idea about what the variable contains or function does. A good name will tell you all there is to know or will tell you enough to know where to look next. It will not let you guess, or wonder. It will not misguide you. A good name is obvious, and expected. It is consistent. Not overly creative. It will not assume context or knowledge that the reader is not likely to have." This is a great article to read about the importance of naming in programming https://wasp-lang.dev/blog/2023/10/12/on-importance-of-naming-in-programming As i said before, the import { Component } from '@anguler/core';
@Component({/*...*/})
export class MyComponent { /*...*/ } With the current generic import { Component as Page } from '@anguler/core';
@Page({/*...*/})
export class DashboardPage { /*...*/ } Ah ok, this is the dashboard page, no need to read the decorator template +500 lines or the class properties/methods :) import { Component as Layout } from '@anguler/core';
@Layout({/*...*/})
export class AdminLayout { /*...*/ } Ah ok, this is the admin layout, no need to read the decorator template or the class properties/methods :) |
I suggest use language comment instead. @Page({
selector: 'posts-page',
template: /* HTML */ `
<h1>My App</h1>
<app-todo-list></app-todo-list>
`,
}) |
Thanks for the reply. I know that naming things appropriately is good practice. But what I am saying is that implementing a new feature is a trade-off for new complexity. If this rule is something that is widely used in the Angular community, then I think it is worth accepting the complexity for this feature. But if this rule is just for you and your team, then I don't think it is worth to increase complexity of Prettier. |
Instead of what ? |
@sosukesuzuki This is not a rule or an Angular feature, as i said before it will not affect the way you write the code ! Since we both agreed that naming things appropriately is a good practice, then it should/worth be adopted by any good community.
Don't worry, it will not increase the complexity of Prettier, I have already created a PR to make prettier parse the import from |
Adding new features necessarily increases complexity. I understand your point, but as a Prettier maintainer I am still against this feature. I recommend using language comments to format your templates, as fisker suggests. |
@sosukesuzuki This is not a new feature, Prettier already supports formatting Angular template string literals, it will just fix/enhance it, a language comment doesn't have to do anything here. I have already created a PR with tests, so as a maintainer, all you will need is to check/test it. |
Instead of this PR Prettier 3.2.5 --parser babel Input: @AnyNameYouWant({
selector: 'posts-page',
template: /* HTML */ `
<h1>My App
</h1>
<app-todo-list></app-todo-list>
`,
})
class a {} Output: @AnyNameYouWant({
selector: "posts-page",
template: /* HTML */ `
<h1>My App</h1>
<app-todo-list></app-todo-list>
`,
})
class a {} |
--parser babel The babel parser doesn't support the new Angular control flow( And even if it supports it, so you suggest/recommend adding an unnecessary comment instead of enhancing Prettier by parsing the Angular import statement ? |
You could also just rename your component class names so that they say if they are Page or layout. So instead of DashboardComponent, you have DashboarLayoutComponent. This would be beneficial in other parts of the app too, as it would convey the type when you import those in other components. |
Why you will use the
AFAIK you don't import those specific "components" in other components, you import/use the page or layout only in the route file, and you don't need to use the |
The problem is not the js parser, but because we infer the embeded parser as html while it should be angular, even if you use
It's not unnecessary, we highly recommend use comments instead of magic names. |
I have asked ChatGPT "What's the purpose of using/adding a comment in programming ?" The response: Comments in programming serve several important purposes: Code Documentation: Explanation: Comments explain what the code does, making it easier for others (and yourself) to understand the logic and purpose of the code when revisiting it later. Complex Code: For particularly complex or non-intuitive sections of code, comments clarify what the code is doing. Debugging and Testing: During debugging or testing, comments can be used to temporarily disable sections of code without deleting them. Version Information: Comments can include version information, authorship, and date of creation/modification. Organizing Code: By using comments to separate different sections, the code becomes more organized and readable. As you can see, your recommendation doesn't make any sense, we don't use comments for that, adding So let's recap :) The issue: How to fix this issue ? The "maintainers" response after +20 comments with zero argument: |
The decision already made by the team long time ago, the embedded language format feature already frozen. The language comment I offer is the only possible solution that may Follow this comment #12139 (comment) if you are interested. There are similar PRs blocked/closed even they are send by team members. |
It seems that prettier is not parsing the
Component
import statement and using the hard string "Component" to detect if it's an Angular component or not(node.callee.name === "Component"
) which means that this would work:But this will not:
-> Prettier will not be able to detect the template since the callee name is
Page
.Same thing for this:
-> Prettier will not be able to detect the template since the callee name is
Layout
.The
Component
decorator name in Angular is so "generic", could be used as aComponent
,Page
(route) and aLayout
, using an alias will make it easier to read and understand.Adding a support for those aliases is so easy too, all we need is to change one line:
Now prettier will detect the new component aliases
Page
andLayout
:)The text was updated successfully, but these errors were encountered: