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

Verbatim strings #535

Merged
merged 10 commits into from
May 28, 2020
Merged

Verbatim strings #535

merged 10 commits into from
May 28, 2020

Conversation

NickHackman
Copy link
Contributor

@NickHackman NickHackman commented May 19, 2020

Closes #330

Adds support for verbatim strings in Rust, CSharp, FSharp, and C++. This should be easy enough to add for any other languages in the future. The only weird case for future contributors, here is that Python behaves correctly in the current implementation of Tokei and would behave incorrectly in the case of verbatim strings.

Issues

Rust

The Rust implementation is fairly naive, ideally languages.json would have a regex /r(#+)"/, but the dependency on the regex crate would add a good chunk to the compile time and would hurt performance, as mentioned in your comment the most common types are implemented here.

C++

I should've seen this coming, C++ is incredibly annoying for verbatim strings, the syntax of "PREFIX()PREFIX" where PREFIX can basically be anything. This would ideally be a regular expression as well. An empty PREFIX appears to be the most common situation so that's currently what's implemented. It appears that scc doesn't work properly for this either as both bare ()s and prefixed ones produce incorrect results.

Any advice/feedback is greatly appreciated 😄

Using example from XAMPPRocky#330, for testing purposes
Rust test case now has a verbatim string that fails, with current
version of Tokei.
C++ Syntax makes this incredibly difficult to parse using the current
infrastructure, `R"PREFIX(    )PREFIX"` where PREFIX can be almost anything.
Quotes that neglect the `\"` rule, in the case of python as mentioned
in XAMPPRocky#330 it produces the correct outcome with Tokei currently.
Properly keeps track of current state and handles escapes properly in
the case of being inside of a verbatim_quote
@NickHackman
Copy link
Contributor Author

CI pipeline timeout when trying to download a dependency, going to blank commit in order to re-trigger the pipeline.

@NickHackman NickHackman marked this pull request as ready for review May 22, 2020 19:05
@NickHackman
Copy link
Contributor Author

@XAMPPRocky should be ready for review now 😄

@XAMPPRocky
Copy link
Owner

Thank you for your PR!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

C# line count is broken if verbatim string with backslash is present
2 participants