docs(ast, ast_macros, ast_tools): better documentation for Ast helper attributes.#4856
Conversation
|
This stack of pull requests is managed by Graphite. Learn more about stacking. |
Ast helper attributes.Ast helper attributes.
Your org has enabled the Graphite merge queue for merging into mainAdd the label “merge” to the PR and Graphite will automatically add it to the merge queue when it’s ready to merge. Or use the label “hotfix” to add to the merge queue as a hot fix. You must have a Graphite account and log in to Graphite in order to use the merge queue. Sign up using this link. |
CodSpeed Performance ReportMerging #4856 will not alter performanceComparing Summary
|
overlookmotel
left a comment
There was a problem hiding this comment.
The docs added here to oxc_ast_macros/src/lib.rs are excellent.
Do you think we should retain some comment at top of oxc_ast/src/ast/js.rs etc pointing readers to the docs in oxc_ast_macros?
People may understand that #[scope] attr etc are probably related to the #[ast] attr, and so will look there for docs. But if you try "jump to definition" on generate_derive, it doesn't take you anywhere, and it's not obvious that generate_derive is related to #[ast].
Oh, I didn't notice outer markers aren't pointing to the macro. My initial reasoning behind removing those was to reduce the surface area of our documentation, It is much easier to maintain the docs in one place instead of having to keep multiple places in sync. I'll bring back the old comments and look for a way so we can have jump to the definition on those attributes as well. |
|
@overlookmotel I've looked into having jump to definition and documentation on each attribute and found this to work: It works similarly to Rust's built-in macros, If we can have a common crate to put some empty macros in it we should be able to document everything. /// Hello darkness my old friend!
macro_rules! generate_derive {
($($trait:ident)*) => { /* `ast_tools` built-in */ }
}
pub(crate) use generate_derive;Then in the proc-macro, I do something like this to get the compiler/RA to understand it. let (abs_derive, generics) = abs_trait(&derive);
let generate_derive = // it doesn't have to be one per derive, We just need to do it once!
quote::quote_spanned!(attr_ident_span => generate_derive!(derive););
quote! {{
// NOTE: these are wrapped in a scope to avoid the need for unique identifiers.
trait AssertionTrait: #abs_derive #generics {}
impl<T: #derive #generics> AssertionTrait for T {}
#generate_derive
}}Do you think it is worth implementing? We can place them in the oxc_ast_macros content goes into a fresh crate called oxc_ast_derive |
a35f20f to
7da3f8a
Compare
Merge activity
|
…er attributes. (#4856)
7da3f8a to
47c9552
Compare
I'm not sure. What do you think? I would definitely say yes if we could do it without adding an extra crate, but if it requires an extra crate, maybe it's not worth the complexity. I am not really au fait with how proc macro spans interface with Rust Analyser, but is there any other way to achieve this? Like e.g.:
Basically, I like this idea, but think introducing an extra crate just for it is maybe overkill. But if you want to go for it, do it! |
I agree on the fact that adding it might be a bit of overkill. Let's see if there comes any other situation that such a thing can help with.
This one isn't possible due to the compiler consuming the
That's exactly what I did in my test. It works great but can only be used within I'll try to think of another way to make it work. |
## [0.24.3] - 2024-08-18 ### Features - d49fb16 oxc_codegen: Support generate range leading comments (#4898) (IWANABETHATGUY) - 80d0d1f semantic: Check for invalid interface heritage clauses (#4928) (DonIsaac) - 48821c0 semantic,syntax: Add SymbolFlags::ArrowFunction (#4946) (DonIsaac) - f1fcdde transformer: Support react fast refresh (#4587) (Dunqing) - 0d79122 transformer: Support logical-assignment-operators plugin (#4890) (Dunqing) - ab1d08c transformer: Support `optional-catch-binding` plugin (#4885) (Dunqing) - 69da9fd transformer: Support nullish-coalescing-operator plugin (#4884) (Dunqing) - 3a66e58 transformer: Support exponentiation operator plugin (#4876) (Dunqing) - f88cbcd transformer: Add `BoundIdentifier::new_uid_in_current_scope` method (#4903) (overlookmotel) - 1e6d0fe transformer: Add methods to `BoundIdentifier` (#4897) (overlookmotel) - fd34640 traverse: Support `generate_uid_based_on_node` method in `TraverseCtx` (#4940) (Dunqing) - 72a37fc traverse: Support `clone_identifier_reference` method in `TraverseCtx` (#4880) (Dunqing) ### Bug Fixes - c0b26f4 ast: Do not include `scope_id` fields in JSON AST (#4858) (overlookmotel) - bbf9ec0 codegen: Add missing `declare` to `PropertyDefinition` (#4937) (Boshen) - f210cf7 codegen: Print `TSSatisfiesExpression` and `TSInstantiationExpression` (#4936) (Boshen) - 21f5762 codegen: Minify large numbers (#4889) (Boshen) - e8de4bd codegen: Fix whitespace issue when minifying `x in new Error()` (#4886) (Boshen) - a226962 codegen: Print `TSNonNullExpression` (#4869) (Boshen) - 3da33d3 codegen: Missing parenthesis for `PrivateInExpression` (#4865) (Boshen) - 1808529 codegen: Dedupe pure annotation comments (#4862) (IWANABETHATGUY) - d3bbc62 isolated-declarations: Declare modifier of PropertyDefinition should not be retained (#4941) (Dunqing) - 8e80f59 isolated_declarations: Class properties should still be lifted from private constructors (#4934) (michaelm) - b3ec9e5 isolated_declarations: Always emit module declarations that perform augmentation (#4919) (michaelm) - 0fb0b71 isolated_declarations: Always emit module declarations (#4911) (michaelm) - 4a16916 isolated_declarations: Support expando functions (#4910) (michaelm) - 508644a linter/tree-shaking: Correct the calculation of `>>`, `<<` and `>>>` (#4932) (mysteryven) - 46cb1c1 minifier: Handle `Object.definedPropert(exports` for @babel/types/lib/index.js (#4933) (Boshen) - 81fd637 minifier: Do not fold `0 && (module.exports = {})` for `cjs-module-lexer` (#4878) (Boshen) - 879a271 minifier: Do not join `require` calls for `cjs-module-lexer` (#4875) (Boshen) - 1bdde2c parser: Detect @flow in `/** @flow */ comment (#4861) (Boshen) - 2476dce transformer: Remove an `ast.copy` from `NullishCoalescingOperator` transform (#4913) (overlookmotel) - 248a757 transformer/typescript: Typescript syntax within `SimpleAssignmentTarget` with `MemberExpressions` is not stripped (#4920) (Dunqing) ### Documentation - 47c9552 ast, ast_macros, ast_tools: Better documentation for `Ast` helper attributes. (#4856) (rzvxa) - 0a01a47 semantic: Improve documentation (#4850) (DonIsaac) - 9c700ed transformer: Add README including style guide (#4899) (overlookmotel) ### Refactor - a6967b3 allocator: Correct code comment (#4904) (overlookmotel) - 90d0b2b allocator, ast, span, ast_tools: Use `allocator` as var name for `Allocator` (#4900) (overlookmotel) - 1eb59d2 ast, isolated_declarations, transformer: Mark `AstBuilder::copy` as an unsafe function (#4907) (overlookmotel) - 8e8fcd0 ast_tools: Rename `oxc_ast_codegen` to `oxc_ast_tools`. (#4846) (rzvxa) - 786bf07 index: Shorten code and correct comment (#4905) (overlookmotel) - ea1e64a semantic: Make SemanticBuilder opaque (#4851) (DonIsaac) - 5fd1701 sourcemap: Lower the `msrv`. (#4873) (rzvxa) - 48a1c32 syntax: Inline trivial bitflags methods (#4877) (overlookmotel) - 452187a transformer: Rename `BoundIdentifier::new_uid_in_root_scope` (#4902) (overlookmotel) - 707a01f transformer: Re-order `BoundIdentifier` methods (#4896) (overlookmotel) - 117dff2 transformer: Improve comments for `BoundIdentifier` helper (#4895) (overlookmotel) Co-authored-by: Boshen <[email protected]>


No description provided.