Conversation
emilio
left a comment
There was a problem hiding this comment.
I haven't thought about the implications yet of non-2018 users. If you can clear that up for me that'd save me time, otherwise I'll look later.
I have one minor style nit other than that, but it looks fine.
src/bindgen/parser.rs
Outdated
| } | ||
|
|
||
| fn parse_mod(&mut self, pkg: &PackageRef, mod_path: &FilePath) -> Result<(), Error> { | ||
| self.parse_mod_depth(pkg, mod_path, 0) |
There was a problem hiding this comment.
Can we just pass zero on the relevant callers and keep parse_mod as the name for all functions?
There was a problem hiding this comment.
I actually hesitated between the two options, fixed in 0d32d99
src/bindgen/parser.rs
Outdated
| let mod_dir = if depth == 0 { | ||
| mod_path.parent().unwrap() | ||
| } else { | ||
| mod_dir_2018 = mod_path.parent().unwrap().join(mod_path.file_stem().unwrap()); |
There was a problem hiding this comment.
Does this break non-2018 users?
There was a problem hiding this comment.
It seems to break non-2018 unfortunately, I added a test for that in 7990b2f and I'll investigate this in more detail.
|
Thanks so much for working on this btw! |
emilio
left a comment
There was a problem hiding this comment.
I'll run it through some complex 2015 code to see if this regresses something, but otherwise looks good with the bit below.
| let mod_dir_2018; | ||
|
|
||
| self.process_mod(pkg, mod_dir, &mod_parsed) | ||
| let mod_dir = if depth == 0 || mod_path.ends_with("mod.rs") { |
There was a problem hiding this comment.
Hmm, I still don't think this is quite sound is it? At the very least we should check the file name for full equality for mod.rs, not just whether the path ends with mod.rs
There was a problem hiding this comment.
Apparently Path::ends_with only checks entire path components so it is checking if the (entire) file name is mod.rs. This wouldn't be the case with a &str.
If the current module is defined in a file called `mod.rs`, it is a 2015 edition module definition file, thus its module directory is the directory containing the `mod.rs` file. Otherwise, it is a 2018 edition or single-file module.
|
Sorry for the lag here, taking this patch for a spin now :) |
emilio
left a comment
There was a problem hiding this comment.
Yeah, this works great. Thank you!
| let mod_dir_2018; | ||
|
|
||
| self.process_mod(pkg, mod_dir, &mod_parsed) | ||
| let mod_dir = if depth == 0 || mod_path.ends_with("mod.rs") { |
1519: Bump cbindgen from 0.14.1 to 0.14.2 r=tomtau a=dependabot-preview[bot] Bumps [cbindgen](https://github.com/eqrion/cbindgen) from 0.14.1 to 0.14.2. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/eqrion/cbindgen/blob/master/CHANGES">cbindgen's changelog</a>.</em></p> <blockquote> <h2>0.14.2</h2> <pre><code> * Fixed minimal dependency versions. ([#507](mozilla/cbindgen#507)) * Add an option to write pragma once. ([#511](mozilla/cbindgen#511)) * Fix submodule scanning for implicit Rust 2018 modules. ([#512](mozilla/cbindgen#512)) * Fix dependency parsing / scanning to handle target-specific versions. ([#513](mozilla/cbindgen#513)) * Use heck for case conversion. ([#514](mozilla/cbindgen#514)) * Add support for verbatim content after includes. ([#416](mozilla/cbindgen#416)) * Allow to add attributes to most generated functions. ([#515](mozilla/cbindgen#515)) </code></pre> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/eqrion/cbindgen/commit/b6b88f8c3024288287368b377e4d928ddcd2b9e2"><code>b6b88f8</code></a> Release v0.14.2</li> <li><a href="https://github.com/eqrion/cbindgen/commit/a05a223704e206679068cf84da09a7b49ea202a4"><code>a05a223</code></a> tests: Add tests for attribute annotations.</li> <li><a href="https://github.com/eqrion/cbindgen/commit/5ee5b3ee8884b256decf6e4d91563799a986d758"><code>5ee5b3e</code></a> ir: Allow per-method annotations for all the auto-generated struct and enum m...</li> <li><a href="https://github.com/eqrion/cbindgen/commit/be8e6ec876972b28519803e041ae12b4c63948fc"><code>be8e6ec</code></a> enum: Allow to store annotations for empty variants.</li> <li><a href="https://github.com/eqrion/cbindgen/commit/1a824c04f21f22d1488609cedf8d0c7b13bb83eb"><code>1a824c0</code></a> Add support for verbatim content after includes</li> <li><a href="https://github.com/eqrion/cbindgen/commit/d0d67165561c6249d39148bc1b63d62d713fdd1a"><code>d0d6716</code></a> ir: Minor cleanup to the cfg code.</li> <li><a href="https://github.com/eqrion/cbindgen/commit/8139fbf3c7db6e0635161ecc5631d865ac4e3d4e"><code>8139fbf</code></a> Fix <a href="https://github-redirect.dependabot.com/eqrion/cbindgen/issues/418">#418</a>: Use heck for case conversion</li> <li><a href="https://github.com/eqrion/cbindgen/commit/4beb526516fa6e1de38cebc3f02b1d095f8947d1"><code>4beb526</code></a> Fix <a href="https://github-redirect.dependabot.com/eqrion/cbindgen/issues/254">#254</a> (<a href="https://github-redirect.dependabot.com/eqrion/cbindgen/issues/512">#512</a>)</li> <li><a href="https://github.com/eqrion/cbindgen/commit/ca1c0b27b66edc372d7c190e8d22e41125a985a4"><code>ca1c0b2</code></a> Run cargo-fmt</li> <li><a href="https://github.com/eqrion/cbindgen/commit/1df5129d1a227d5f1dbf66b6d8fe66eba44ae880"><code>1df5129</code></a> Fix 2015 edition module path resolution</li> <li>Additional commits viewable in <a href="https://github.com/eqrion/cbindgen/compare/v0.14.1...v0.14.2">compare view</a></li> </ul> </details> <br /> [](https://dependabot.com/compatibility-score/?dependency-name=cbindgen&package-manager=cargo&previous-version=0.14.1&new-version=0.14.2) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language - `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com): - Update frequency (including time of day and day of week) - Pull request limits (per update run and/or open at any time) - Out-of-range updates (receive only lockfile updates, if desired) - Security updates (receive only security updates, if desired) </details> Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
Bump cbindgen from 0.14.1 to 0.14.2 Bumps [cbindgen](https://github.com/eqrion/cbindgen) from 0.14.1 to 0.14.2. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/eqrion/cbindgen/blob/master/CHANGES">cbindgen's changelog</a>.</em></p> <blockquote> <h2>0.14.2</h2> <pre><code> * Fixed minimal dependency versions. ([#507](mozilla/cbindgen#507)) * Add an option to write pragma once. ([#511](mozilla/cbindgen#511)) * Fix submodule scanning for implicit Rust 2018 modules. ([#512](mozilla/cbindgen#512)) * Fix dependency parsing / scanning to handle target-specific versions. ([#513](mozilla/cbindgen#513)) * Use heck for case conversion. ([#514](mozilla/cbindgen#514)) * Add support for verbatim content after includes. ([#416](mozilla/cbindgen#416)) * Allow to add attributes to most generated functions. ([#515](mozilla/cbindgen#515)) </code></pre> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/eqrion/cbindgen/commit/b6b88f8c3024288287368b377e4d928ddcd2b9e2"><code>b6b88f8</code></a> Release v0.14.2</li> <li><a href="https://github.com/eqrion/cbindgen/commit/a05a223704e206679068cf84da09a7b49ea202a4"><code>a05a223</code></a> tests: Add tests for attribute annotations.</li> <li><a href="https://github.com/eqrion/cbindgen/commit/5ee5b3ee8884b256decf6e4d91563799a986d758"><code>5ee5b3e</code></a> ir: Allow per-method annotations for all the auto-generated struct and enum m...</li> <li><a href="https://github.com/eqrion/cbindgen/commit/be8e6ec876972b28519803e041ae12b4c63948fc"><code>be8e6ec</code></a> enum: Allow to store annotations for empty variants.</li> <li><a href="https://github.com/eqrion/cbindgen/commit/1a824c04f21f22d1488609cedf8d0c7b13bb83eb"><code>1a824c0</code></a> Add support for verbatim content after includes</li> <li><a href="https://github.com/eqrion/cbindgen/commit/d0d67165561c6249d39148bc1b63d62d713fdd1a"><code>d0d6716</code></a> ir: Minor cleanup to the cfg code.</li> <li><a href="https://github.com/eqrion/cbindgen/commit/8139fbf3c7db6e0635161ecc5631d865ac4e3d4e"><code>8139fbf</code></a> Fix <a href="https://github-redirect.dependabot.com/eqrion/cbindgen/issues/418">#418</a>: Use heck for case conversion</li> <li><a href="https://github.com/eqrion/cbindgen/commit/4beb526516fa6e1de38cebc3f02b1d095f8947d1"><code>4beb526</code></a> Fix <a href="https://github-redirect.dependabot.com/eqrion/cbindgen/issues/254">#254</a> (<a href="https://github-redirect.dependabot.com/eqrion/cbindgen/issues/512">#512</a>)</li> <li><a href="https://github.com/eqrion/cbindgen/commit/ca1c0b27b66edc372d7c190e8d22e41125a985a4"><code>ca1c0b2</code></a> Run cargo-fmt</li> <li><a href="https://github.com/eqrion/cbindgen/commit/1df5129d1a227d5f1dbf66b6d8fe66eba44ae880"><code>1df5129</code></a> Fix 2015 edition module path resolution</li> <li>Additional commits viewable in <a href="https://github.com/eqrion/cbindgen/compare/v0.14.1...v0.14.2">compare view</a></li> </ul> </details> <br /> [](https://dependabot.com/compatibility-score/?dependency-name=cbindgen&package-manager=cargo&previous-version=0.14.1&new-version=0.14.2) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language - `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com): - Update frequency (including time of day and day of week) - Pull request limits (per update run and/or open at any time) - Out-of-range updates (receive only lockfile updates, if desired) - Security updates (receive only security updates, if desired) </details>
Bump cbindgen from 0.14.1 to 0.14.2 Bumps [cbindgen](https://github.com/eqrion/cbindgen) from 0.14.1 to 0.14.2. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/eqrion/cbindgen/blob/master/CHANGES">cbindgen's changelog</a>.</em></p> <blockquote> <h2>0.14.2</h2> <pre><code> * Fixed minimal dependency versions. ([#507](mozilla/cbindgen#507)) * Add an option to write pragma once. ([#511](mozilla/cbindgen#511)) * Fix submodule scanning for implicit Rust 2018 modules. ([#512](mozilla/cbindgen#512)) * Fix dependency parsing / scanning to handle target-specific versions. ([#513](mozilla/cbindgen#513)) * Use heck for case conversion. ([#514](mozilla/cbindgen#514)) * Add support for verbatim content after includes. ([#416](mozilla/cbindgen#416)) * Allow to add attributes to most generated functions. ([#515](mozilla/cbindgen#515)) </code></pre> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/eqrion/cbindgen/commit/b6b88f8c3024288287368b377e4d928ddcd2b9e2"><code>b6b88f8</code></a> Release v0.14.2</li> <li><a href="https://github.com/eqrion/cbindgen/commit/a05a223704e206679068cf84da09a7b49ea202a4"><code>a05a223</code></a> tests: Add tests for attribute annotations.</li> <li><a href="https://github.com/eqrion/cbindgen/commit/5ee5b3ee8884b256decf6e4d91563799a986d758"><code>5ee5b3e</code></a> ir: Allow per-method annotations for all the auto-generated struct and enum m...</li> <li><a href="https://github.com/eqrion/cbindgen/commit/be8e6ec876972b28519803e041ae12b4c63948fc"><code>be8e6ec</code></a> enum: Allow to store annotations for empty variants.</li> <li><a href="https://github.com/eqrion/cbindgen/commit/1a824c04f21f22d1488609cedf8d0c7b13bb83eb"><code>1a824c0</code></a> Add support for verbatim content after includes</li> <li><a href="https://github.com/eqrion/cbindgen/commit/d0d67165561c6249d39148bc1b63d62d713fdd1a"><code>d0d6716</code></a> ir: Minor cleanup to the cfg code.</li> <li><a href="https://github.com/eqrion/cbindgen/commit/8139fbf3c7db6e0635161ecc5631d865ac4e3d4e"><code>8139fbf</code></a> Fix <a href="https://github-redirect.dependabot.com/eqrion/cbindgen/issues/418">#418</a>: Use heck for case conversion</li> <li><a href="https://github.com/eqrion/cbindgen/commit/4beb526516fa6e1de38cebc3f02b1d095f8947d1"><code>4beb526</code></a> Fix <a href="https://github-redirect.dependabot.com/eqrion/cbindgen/issues/254">#254</a> (<a href="https://github-redirect.dependabot.com/eqrion/cbindgen/issues/512">#512</a>)</li> <li><a href="https://github.com/eqrion/cbindgen/commit/ca1c0b27b66edc372d7c190e8d22e41125a985a4"><code>ca1c0b2</code></a> Run cargo-fmt</li> <li><a href="https://github.com/eqrion/cbindgen/commit/1df5129d1a227d5f1dbf66b6d8fe66eba44ae880"><code>1df5129</code></a> Fix 2015 edition module path resolution</li> <li>Additional commits viewable in <a href="https://github.com/eqrion/cbindgen/compare/v0.14.1...v0.14.2">compare view</a></li> </ul> </details> <br /> [](https://dependabot.com/compatibility-score/?dependency-name=cbindgen&package-manager=cargo&previous-version=0.14.1&new-version=0.14.2) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language - `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com): - Update frequency (including time of day and day of week) - Pull request limits (per update run and/or open at any time) - Out-of-range updates (receive only lockfile updates, if desired) - Security updates (receive only security updates, if desired) </details>
By checking the recursion depth in the crate we are currently parsing, we can decide on the right module directory to find submodules in. The added
mod_2018test fails without the changes toparser.rs.