Skip to content

rustdoc --json struct and enum impls are blank #100242

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Closed
makspll opened this issue Aug 7, 2022 · 4 comments · Fixed by #100325
Closed

rustdoc --json struct and enum impls are blank #100242

makspll opened this issue Aug 7, 2022 · 4 comments · Fixed by #100325
Labels
A-rustdoc-json Area: Rustdoc JSON backend C-bug Category: This is a bug. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue.

Comments

@makspll
Copy link

makspll commented Aug 7, 2022

running rustup run nightly cargo rustdoc -p glam -- -Zunstable-options --output-format json

produces this record for the glam type Mat3:

         "0:9614:1735": {
            "id": "0:9614:1735",
            "crate_id": 0,
            "name": "Mat3",
            "span": {
                "filename": "/home/makspll/.cargo/registry/src/github.heygears.com-1ecc6299db9ec823/glam-0.21.2/src/f32/mat3.rs",
                "begin": [
                    45,
                    0
                ],
                "end": [
                    49,
                    1
                ]
            },
            "visibility": "public",
            "docs": "A 3x3 column major matrix.\n\nThis 3x3 matrix type features convenience methods for creating and using linear and\naffine transformations. If you are primarily dealing with 2D affine transformations the\n[`Affine2`](crate::Affine2) type is much faster and more space efficient than\nusing a 3x3 matrix.\n\nLinear transformations including 3D rotation and scale can be created using methods\nsuch as [`Self::from_diagonal()`], [`Self::from_quat()`], [`Self::from_axis_angle()`],\n[`Self::from_rotation_x()`], [`Self::from_rotation_y()`], or\n[`Self::from_rotation_z()`].\n\nThe resulting matrices can be use to transform 3D vectors using regular vector\nmultiplication.\n\nAffine transformations including 2D translation, rotation and scale can be created\nusing methods such as [`Self::from_translation()`], [`Self::from_angle()`],\n[`Self::from_scale()`] and [`Self::from_scale_angle_translation()`].\n\nThe [`Self::transform_point2()`] and [`Self::transform_vector2()`] convenience methods\nare provided for performing affine transforms on 2D vectors and points. These multiply\n2D inputs as 3D vectors with an implicit `z` value of `1` for points and `0` for\nvectors respectively. These methods assume that `Self` contains a valid affine\ntransform.",
            "links": {
                "crate::Affine2": "0:9602:2046",
                "`Self::from_diagonal()`": "0:9614:1735",
                "`Self::from_axis_angle()`": "0:9614:1735",
                "`Self::from_scale()`": "0:9614:1735",
                "`Self::from_angle()`": "0:9614:1735",
                "`Self::from_quat()`": "0:9614:1735",
                "`Self::from_rotation_z()`": "0:9614:1735",
                "`Self::transform_vector2()`": "0:9614:1735",
                "`Self::from_rotation_y()`": "0:9614:1735",
                "`Self::from_scale_angle_translation()`": "0:9614:1735",
                "`Self::from_rotation_x()`": "0:9614:1735",
                "`Self::from_translation()`": "0:9614:1735",
                "`Self::transform_point2()`": "0:9614:1735"
            },
            "attrs": [
                "#[repr(C)]"
            ],
            "deprecation": null,
            "kind": "struct",
            "inner": {
                "struct_type": "plain",
                "generics": {
                    "params": [],
                    "where_predicates": []
                },
                "fields_stripped": false,
                "fields": [
                    "0:9615:1809",
                    "0:9616:1810",
                    "0:9617:1812"
                ],
                "impls": []
            }
        }

I would expect "impls" to not be blank, since the matrix implements many traits and has a non-trait implementation as well. The paths entry also does not contain Mat3 as well as many other types exported by the crate, is this expected ? I know that these paths included all exported types before

Meta

rustc --version --verbose:

$ rustup run nightly rustc --version
rustc 1.65.0-nightly (2befdefdd 2022-08-06)

Meta

rustc --version --verbose:

$ rustup run nightly rustc --version
rustc 1.65.0-nightly (2befdefdd 2022-08-06)
@makspll makspll added the C-bug Category: This is a bug. label Aug 7, 2022
@makspll
Copy link
Author

makspll commented Aug 7, 2022

Now running with rustup run nightly-2022-07-01 cargo rustdoc -p glam -- -Zunstable-options --output-format json
produces:

"0:9614:1703": {
            "id": "0:9614:1703",
            "crate_id": 0,
            "name": "Mat3",
            "span": {
                "filename": "/home/makspll/.cargo/registry/src/github.heygears.com-1ecc6299db9ec823/glam-0.21.2/src/f32/mat3.rs",
                "begin": [
                    45,
                    0
                ],
                "end": [
                    49,
                    1
                ]
            },
            "visibility": "public",
            "docs": "A 3x3 column major matrix.\n\nThis 3x3 matrix type features convenience methods for creating and using linear and\naffine transformations. If you are primarily dealing with 2D affine transformations the\n[`Affine2`](crate::Affine2) type is much faster and more space efficient than\nusing a 3x3 matrix.\n\nLinear transformations including 3D rotation and scale can be created using methods\nsuch as [`Self::from_diagonal()`], [`Self::from_quat()`], [`Self::from_axis_angle()`],\n[`Self::from_rotation_x()`], [`Self::from_rotation_y()`], or\n[`Self::from_rotation_z()`].\n\nThe resulting matrices can be use to transform 3D vectors using regular vector\nmultiplication.\n\nAffine transformations including 2D translation, rotation and scale can be created\nusing methods such as [`Self::from_translation()`], [`Self::from_angle()`],\n[`Self::from_scale()`] and [`Self::from_scale_angle_translation()`].\n\nThe [`Self::transform_point2()`] and [`Self::transform_vector2()`] convenience methods\nare provided for performing affine transforms on 2D vectors and points. These multiply\n2D inputs as 3D vectors with an implicit `z` value of `1` for points and `0` for\nvectors respectively. These methods assume that `Self` contains a valid affine\ntransform.",
            "links": {
                "`Self::transform_vector2()`": "0:9614:1703",
                "`Self::from_quat()`": "0:9614:1703",
                "`Self::from_rotation_x()`": "0:9614:1703",
                "`Self::from_rotation_z()`": "0:9614:1703",
                "`Self::from_scale()`": "0:9614:1703",
                "crate::Affine2": "0:9602:2017",
                "`Self::transform_point2()`": "0:9614:1703",
                "`Self::from_rotation_y()`": "0:9614:1703",
                "`Self::from_angle()`": "0:9614:1703",
                "`Self::from_diagonal()`": "0:9614:1703",
                "`Self::from_translation()`": "0:9614:1703",
                "`Self::from_scale_angle_translation()`": "0:9614:1703",
                "`Self::from_axis_angle()`": "0:9614:1703"
            },
            "attrs": [
                "#[repr(C)]"
            ],
            "deprecation": null,
            "kind": "struct",
            "inner": {
                "struct_type": "plain",
                "generics": {
                    "params": [],
                    "where_predicates": []
                },
                "fields_stripped": false,
                "fields": [
                    "0:9615:1779",
                    "0:9616:1780",
                    "0:9617:1782"
                ],
                "impls": [
                    "0:1075",
                    "a:2:9217:9876-0:9614:1703",
                    "a:2:3276:4385-0:9614:1703",
                    "a:2:3247:208-0:9614:1703",
                    "a:2:9218:9875-0:9614:1703",
                    "a:2:3235:199-0:9614:1703",
                    "b:2:3179-0:9614:1703",
                    "b:2:3168-0:9614:1703",
                    "b:2:3164-0:9614:1703",
                    "b:2:2838-0:9614:1703",
                    "b:2:3964-0:9614:1703",
                    "b:2:3174-0:9614:1703",
                    "b:2:2841-0:9614:1703",
                    "b:5:6398-0:9614:1703",
                    "b:5:779-0:9614:1703",
                    "b:20:93-0:9614:1703",
                    "b:20:425-0:9614:1703",
                    "b:20:114-0:9614:1703",
                    "b:22:1583-0:9614:1703",
                    "0:138",
                    "0:139",
                    "0:9150",
                    "0:9153",
                    "0:878",
                    "0:880",
                    "0:883",
                    "0:9618",
                    "0:9620",
                    "0:1124",
                    "0:1126",
                    "0:1129",
                    "0:1131",
                    "0:1134",
                    "0:1136",
                    "0:1139",
                    "0:1142",
                    "0:1144",
                    "0:1147",
                    "0:1150",
                    "0:1153",
                    "0:1155",
                    "0:1158",
                    "0:1160",
                    "0:1165",
                    "0:1170",
                    "0:1172",
                    "0:1177",
                    "0:1182",
                    "0:1184",
                    "0:1924"
                ]
            }
        },

So i think there's been a regression since then

@Enselic
Copy link
Member

Enselic commented Aug 7, 2022

Thank you for reporting 👍

@rustbot labels +A-rustdoc-json +T-rustdoc

@rustbot rustbot added A-rustdoc-json Area: Rustdoc JSON backend T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue. labels Aug 7, 2022
@Enselic
Copy link
Member

Enselic commented Aug 7, 2022

Seems like this could be another symptom of the regression reported as #100204

@aDotInTheVoid
Copy link
Member

This is the same issue as #100252: Items in a non-public module (ie accessed only via imports) have no impls

matthiaskrgr added a commit to matthiaskrgr/rust that referenced this issue Aug 15, 2022
…uillaumeGomez

Rustdoc-Json: Don't remove impls for items imported from private modules

After rust-lang#99287, items in private modules may still be in the json output, if a public import accesses them. To reflect this, items that are imported need to be marked as retained in the `Stripper` pass, so their impls arn't removed by `ImplStripper`.

[More context on zulip](https://rust-lang.zulipchat.com/#narrow/stream/266220-rustdoc/topic/Populating.20cache.2Eimpls), thanks to @ jyn514 for helping debug this.

`@rustbot` modify labels: +A-rustdoc-json +T-rustdoc

r? `@GuillaumeGomez`

Fixes rust-lang#100252
Fixes rust-lang#100242
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this issue Aug 15, 2022
…uillaumeGomez

Rustdoc-Json: Don't remove impls for items imported from private modules

After rust-lang#99287, items in private modules may still be in the json output, if a public import accesses them. To reflect this, items that are imported need to be marked as retained in the `Stripper` pass, so their impls arn't removed by `ImplStripper`.

[More context on zulip](https://rust-lang.zulipchat.com/#narrow/stream/266220-rustdoc/topic/Populating.20cache.2Eimpls), thanks to @ jyn514 for helping debug this.

``@rustbot`` modify labels: +A-rustdoc-json +T-rustdoc

r? ``@GuillaumeGomez``

Fixes rust-lang#100252
Fixes rust-lang#100242
@bors bors closed this as completed in 44b489f Aug 15, 2022
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
A-rustdoc-json Area: Rustdoc JSON backend C-bug Category: This is a bug. T-rustdoc Relevant to the rustdoc team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants