-
Notifications
You must be signed in to change notification settings - Fork 1k
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
[naga] Comments parsing (naga + wgsl) #6364
base: trunk
Are you sure you want to change the base?
Conversation
This doesn't get the comments out of the front end, though, does it? It seems to me it could be fine to just add a field like: doc_comments: Option<Box<DocComments>>, to struct DocComments {
types: FastIndexMap<Handle<Type>, Vec<Span>>,
global_variables: FastIndexMap<Handle<GlobalVariable>, Vec<Span>>,
...
} I think it would make sense for Naga to adopt Rust's |
Correct, I'm looking into propagating them to the module now ; my first intuition was to add comments to Your idea of a "flat" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some more comments here.
You'll also need to change compact::compact
to adjust the type handles, even though only named types can have comments and compaction never removes named types, because compaction may remove anonymous types, and that renumbers the handles.
naga/src/lib.rs
Outdated
@@ -2263,4 +2263,27 @@ pub struct Module { | |||
pub functions: Arena<Function>, | |||
/// Entry points. | |||
pub entry_points: Vec<EntryPoint>, | |||
/// Comments, usually serving as documentation | |||
pub comments: Comments, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this should be an Option<Box<Comments>>
, so that users who aren't interested in collecting these comments don't need to spend memory on them.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I did the change ; we could also add a feature for that ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe I didn't really say what I meant:
I think users should be able to choose to collect or ignore comments at run time. That is, naga::front::wgsl::FrontEnd::new
should take an Options
type, or FrontEnd
should have a new_with_comments
constructor - or whatever, something boring but tasteful - and then parsing should return a Module
whose comments
field is either populated or not.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks ! I addressed this in 57865be ; I'm open to suggestions about the implementation.
I updated a few tests to test both options.
It should be fine to work on |
@Vrixyz Since this isn't passing CI, to make it easier to track stuff I need to review, I'm going to convert this to a draft PR until those issues are sorted out. Feel free to flip it back into non-draft when you're ready. |
0025864
to
243445c
Compare
I rebased on trunk (github comment reviews are degraded, but I adressed those 🤞), tests are encouraging, there's a major bug I'm investigating still (validation_error_messages): I think spans are incorrect, which I hope to fix by working on Jim's feedback. ❓ I'm curious about "pushing rules": I imagine parsing should contain a rule for parsing comments ? so we push that rule when checking for comments. |
You mean The rule stack is currently being used as a rough approximation to WGSL's template list discovery, which you definitely do not want to get tangled up with, and which shouldn't affect your work at all. And it's used for some sanity checks. |
…est in naga/tests/in
…th comments parsing enabled.
d0299b6
to
386ed0d
Compare
386ed0d
to
9cb6d53
Compare
I did that in 9cb6d53 👍 |
Connections
None as far as I know.
Description
Generating automated documentation à la https://docs.rs is very useful, but currently difficult.
naga lacks information about comments to be too helpful, so this pull requests adds support to parsing those.
Testing
cargo xtask test
run doesn't yield more errors than trunk.Status
DocComment
DocCommentModule
///
comments/** */
comments//!
module comments/*! */
module commentsast::Struct
//!
.naga::Module
Checklist
cargo fmt
.cargo clippy
. If applicable, add:--target wasm32-unknown-unknown
--target wasm32-unknown-emscripten
cargo xtask test
to run tests.CHANGELOG.md
. See simple instructions inside file.