Skip to content
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

feat: Allow multiple types to set #[ts(export_to = "...")] to the same file #316

Merged
merged 36 commits into from
Aug 1, 2024

Conversation

escritorio-gustavo
Copy link
Contributor

@escritorio-gustavo escritorio-gustavo commented May 10, 2024

Goal

Allow for multiple types to be exported to the same file by editing the target file when it is encountered by the second time
Closes #59

Changes

Created a HashMap mapping file paths to a set of type identifiers and using it to decide whether or not the file should be created from scratch or edited

Checklist

  • I have followed the steps listed in the Contributing guide.
  • If necessary, I have added documentation related to the changes made.
  • I have added or updated the tests related to the changes made.
    • Thanks @martpie for helping test this feature

@escritorio-gustavo escritorio-gustavo changed the title Export same file Allow multiple types to set #[ts(export_to = "...")] to the same file May 10, 2024
@escritorio-gustavo escritorio-gustavo added the enhancement New feature or request label May 27, 2024
@escritorio-gustavo escritorio-gustavo changed the title Allow multiple types to set #[ts(export_to = "...")] to the same file feat: Allow multiple types to set #[ts(export_to = "...")] to the same file May 27, 2024
@arslnb
Copy link

arslnb commented Jun 5, 2024

+1, looking forward to this!

@escritorio-gustavo
Copy link
Contributor Author

escritorio-gustavo commented Jun 5, 2024

Hey @arslnb! This feature is pretty much done, but I'd still like to make sure it doesn't break anything. If you have any projects that would benefit from this, would mind testing out this branch and checking if your resulting TypeScript is correct?

@gustavo-shigueo
Copy link
Collaborator

Hey @NyxCode! Can you check this one out when you have some time?

@martpie
Copy link

martpie commented Jul 25, 2024

The sorting seems to be fixed, but I still see the header generated comment twice. Not a big deal, I'm just sharing what I see ;)

@martpie
Copy link

martpie commented Jul 25, 2024

There also seems to be some line breaks added here and there in the docstrings, but I'm really just nitpicking at this point (left is generated, right is the source)

Screenshot 2024-07-25 at 12 46 19

@gustavo-shigueo
Copy link
Collaborator

if the user has "export type " in the JSDoc, the sorting will unfortunately include that, but there's not much I can do about it

Slightly improved this by getting the last "export type ", now it'll only break if a field's JSDoc has that in it

@gustavo-shigueo
Copy link
Collaborator

There also seems to be some line breaks added here and there in the docstrings, but I'm really just nitpicking at this point (left is generated, right is the source)

Screenshot 2024-07-25 at 12 46 19

Did this happen with the version from crates.io? The docs feature was made with /// comments in mind, so maybe it just has a bug dealiing with /** */ comments.

@gustavo-shigueo

This comment was marked as resolved.

@gustavo-shigueo

This comment was marked as resolved.

@gustavo-shigueo

This comment was marked as resolved.

@gustavo-shigueo

This comment was marked as resolved.

Comment on lines 161 to 163
let file_len = file.metadata()?.len() as usize;
let file_len = file.metadata()?.len();

let mut original_contents = String::with_capacity(file_len);
let mut original_contents = String::with_capacity(file_len as usize);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change does nothing, it was leftover from when I was testing something else

@martpie
Copy link

martpie commented Jul 25, 2024

I can confirm the double header issue is fixed :]

@gustavo-shigueo

This comment was marked as resolved.

@gustavo-shigueo

This comment was marked as resolved.

@gustavo-shigueo
Copy link
Collaborator

@NyxCode I think this PR should be ready for merging, do you have anything you'd like to be changed here beforehand?

@gustavo-shigueo
Copy link
Collaborator

There also seems to be some line breaks added here and there in the docstrings, but I'm really just nitpicking at this point (left is generated, right is the source)

This should now be fixed too

@Zerowalker
Copy link

Oh this would be neat.
Would be nice to have the option to do this globally as well.

For example I got a ton of types,
so having to do #[ts(export_to = "...")] on all is a bit messy.
So if possible overriding it to say "export all to X" or something would be neat.

Though I understand that might be beyond what this is attempting to do,
but just throwing it in there.

A great feature nonetheless :)

@gustavo-shigueo
Copy link
Collaborator

gustavo-shigueo commented Aug 1, 2024

So if possible overriding it to say "export all to X" or something would be neat.

There is the TS_RS_EXPORT_DIR environment variable, which changes the directory the types are exported to. When used, all types will be exported to the given directory, and each type will be its own file, without needing to use #[ts(export_to = "...")].

To use it, create a file at: .cargp/config.toml (note that the .cargo directory must be in the root of your project - besides Cargo.toml) and write the following:

[env]
TS_RS_EXPORT_DIR = { value = "<PATH_RELATIVE_TO_CARGO_TOML>", relative = true }

Development history of TS_RS_EXPORT_DIR if you're curious:

Though I understand that might be beyond what this is attempting to do,

If you mean "export everything to the same file", then yeah, it is kinda out of the scope of this PR. It could be possible to have a different environment variable for it, but the CLI being developed in #304 accomplishes this and checks for naming collisions better than would be possible here

@gustavo-shigueo gustavo-shigueo merged commit 5cbc740 into main Aug 1, 2024
16 checks passed
@gustavo-shigueo gustavo-shigueo deleted the export_same_file branch August 1, 2024 21:15
@martpie
Copy link

martpie commented Aug 26, 2024

Any idea when this will be officially released? I know I can use a pointer to a github commit, but still ;)

@gustavo-shigueo
Copy link
Collaborator

I think this feature will go into version 10 due to some breaking changes in other PRs, but I have to check with @NyxCode about that

@gschier gschier mentioned this pull request Sep 17, 2024
@NyxCode NyxCode mentioned this pull request Sep 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Combine exports into single file
5 participants