File tree Expand file tree Collapse file tree 2 files changed +166
-1
lines changed
src/tools/rust-analyzer/crates Expand file tree Collapse file tree 2 files changed +166
-1
lines changed Original file line number Diff line number Diff line change @@ -179,7 +179,19 @@ impl Definition {
179179 Definition :: Static ( it) => it. docs ( db) ,
180180 Definition :: Trait ( it) => it. docs ( db) ,
181181 Definition :: TraitAlias ( it) => it. docs ( db) ,
182- Definition :: TypeAlias ( it) => it. docs ( db) ,
182+ Definition :: TypeAlias ( it) => {
183+ it. docs ( db) . or_else ( || {
184+ // docs are missing, try to fall back to the docs of the aliased item.
185+ let adt = it. ty ( db) . as_adt ( ) ?;
186+ let docs = adt. docs ( db) ?;
187+ let docs = format ! (
188+ "*This is the documentation for* `{}`\n \n {}" ,
189+ adt. display( db, edition) ,
190+ docs. as_str( )
191+ ) ;
192+ Some ( Documentation :: new ( docs) )
193+ } )
194+ }
183195 Definition :: BuiltinType ( it) => {
184196 famous_defs. and_then ( |fd| {
185197 // std exposes prim_{} modules with docstrings on the root to document the builtins
Original file line number Diff line number Diff line change @@ -9018,3 +9018,156 @@ foo!(BAR_$0);
90189018 "# ] ] ,
90199019 ) ;
90209020}
9021+
9022+ #[ test]
9023+ fn type_alias_without_docs ( ) {
9024+ // Simple.
9025+ check (
9026+ r#"
9027+ /// Docs for B
9028+ struct B;
9029+
9030+ type A$0 = B;
9031+ "# ,
9032+ expect ! [ [ r#"
9033+ *A*
9034+
9035+ ```rust
9036+ test
9037+ ```
9038+
9039+ ```rust
9040+ // size = 0, align = 1
9041+ type A = B
9042+ ```
9043+
9044+ ---
9045+
9046+ *This is the documentation for* `struct B`
9047+
9048+ Docs for B
9049+ "# ] ] ,
9050+ ) ;
9051+
9052+ // Nested.
9053+ check (
9054+ r#"
9055+ /// Docs for C
9056+ struct C;
9057+
9058+ type B = C;
9059+
9060+ type A$0 = B;
9061+ "# ,
9062+ expect ! [ [ r#"
9063+ *A*
9064+
9065+ ```rust
9066+ test
9067+ ```
9068+
9069+ ```rust
9070+ // size = 0, align = 1
9071+ type A = B
9072+ ```
9073+
9074+ ---
9075+
9076+ *This is the documentation for* `struct C`
9077+
9078+ Docs for C
9079+ "# ] ] ,
9080+ ) ;
9081+
9082+ // Showing the docs for aliased struct instead of intermediate type.
9083+ check (
9084+ r#"
9085+ /// Docs for C
9086+ struct C;
9087+
9088+ /// Docs for B
9089+ type B = C;
9090+
9091+ type A$0 = B;
9092+ "# ,
9093+ expect ! [ [ r#"
9094+ *A*
9095+
9096+ ```rust
9097+ test
9098+ ```
9099+
9100+ ```rust
9101+ // size = 0, align = 1
9102+ type A = B
9103+ ```
9104+
9105+ ---
9106+
9107+ *This is the documentation for* `struct C`
9108+
9109+ Docs for C
9110+ "# ] ] ,
9111+ ) ;
9112+
9113+ // No docs found.
9114+ check (
9115+ r#"
9116+ struct C;
9117+
9118+ type B = C;
9119+
9120+ type A$0 = B;
9121+ "# ,
9122+ expect ! [ [ r#"
9123+ *A*
9124+
9125+ ```rust
9126+ test
9127+ ```
9128+
9129+ ```rust
9130+ // size = 0, align = 1
9131+ type A = B
9132+ ```
9133+ "# ] ] ,
9134+ ) ;
9135+
9136+ // Multiple nested crate.
9137+ check (
9138+ r#"
9139+ //- /lib.rs crate:c
9140+ /// Docs for C
9141+ pub struct C;
9142+
9143+ //- /lib.rs crate:b deps:c
9144+ pub use c::C;
9145+ pub type B = C;
9146+
9147+ //- /lib.rs crate:a deps:b
9148+ pub use b::B;
9149+ pub type A = B;
9150+
9151+ //- /main.rs crate:main deps:a
9152+ use a::A$0;
9153+ "# ,
9154+ expect ! [ [ r#"
9155+ *A*
9156+
9157+ ```rust
9158+ a
9159+ ```
9160+
9161+ ```rust
9162+ // size = 0, align = 1
9163+ pub type A = B
9164+ ```
9165+
9166+ ---
9167+
9168+ *This is the documentation for* `pub struct C`
9169+
9170+ Docs for C
9171+ "# ] ] ,
9172+ ) ;
9173+ }
You can’t perform that action at this time.
0 commit comments