次のようなライブラリがあるとします。
extension Foo on String {
/// Print this and [another].
void doStuff(String another) {
print(this + another);
}
}
実行中のdartdocがクラッシュします。 [another]
を削除しても発生しません。 参照を解決しようとすると、タイプエラーが発生します。
dartdoc failed: type 'Extension' is not a subtype of type 'Class'
package:dartdoc/src/markdown_processor.dart 209:66 _getMatchingLinkElement
package:dartdoc/src/markdown_processor.dart 758:12 _linkDocReference
package:dartdoc/src/markdown_processor.dart 1006:22 Documentation._renderMarkdownToHtml._linkResolver
package:markdown/src/inline_parser.dart 720:14 LinkSyntax._resolveReferenceLink
package:markdown/src/inline_parser.dart 742:9 LinkSyntax._tryAddReferenceLink
package:markdown/src/inline_parser.dart 692:12 LinkSyntax.onMatchEnd
package:markdown/src/inline_parser.dart 1216:16 TagState.close
package:markdown/src/inline_parser.dart 1155:7 TagState.tryMatch
package:markdown/src/inline_parser.dart 106:57 InlineParser.parse.<fn>
dart:_internal ListIterable.any
package:markdown/src/inline_parser.dart 106:12 InlineParser.parse
package:dartdoc/src/markdown_processor.dart 903:53 MarkdownDocument._parseInlineContent
package:dartdoc/src/markdown_processor.dart 908:9 MarkdownDocument._parseInlineContent
package:dartdoc/src/markdown_processor.dart 928:5 MarkdownDocument.renderLinesToHtml
package:dartdoc/src/markdown_processor.dart 1016:21 Documentation._renderMarkdownToHtml
package:dartdoc/src/markdown_processor.dart 986:9 Documentation._renderHtmlForDartdoc
package:dartdoc/src/markdown_processor.dart 977:7 Documentation.asOneLiner
package:dartdoc/src/model.dart 3901:25 ModelElement.computeOneLineDoc
package:dartdoc/src/model.dart 3907:21 ModelElement.oneLineDoc
dart:mirrors _InstanceMirror.getField
package:mustache/src/renderer.dart 245:29 Renderer._getNamedProperty
package:mustache/src/renderer.dart 212:16 Renderer.resolveValue
package:mustache/src/renderer.dart 90:17 Renderer.visitVariable
package:mustache/src/node.dart 45:43 VariableNode.accept
package:mustache/src/renderer.dart 64:53 Renderer.render.<fn>
dart:_internal ListIterable.forEach
package:mustache/src/renderer.dart 64:36 Renderer.render
package:mustache/src/renderer.dart 195:16 Renderer.visitPartial
package:mustache/src/node.dart 81:43 PartialNode.accept
package:mustache/src/node.dart 66:37 SectionNode.visitChildren.<fn>
dart:core List.forEach
package:mustache/src/node.dart 66:14 SectionNode.visitChildren
package:mustache/src/renderer.dart 184:10 Renderer._renderWithValue
package:mustache/src/renderer.dart 126:28 Renderer._renderSection.<fn>
dart:core Iterable.forEach
package:mustache/src/renderer.dart 126:13 Renderer._renderSection
package:mustache/src/renderer.dart 115:7 Renderer.visitSection
package:mustache/src/node.dart 63:43 SectionNode.accept
package:mustache/src/node.dart 66:37 SectionNode.visitChildren.<fn>
dart:core List.forEach
package:mustache/src/node.dart 66:14 SectionNode.visitChildren
package:mustache/src/renderer.dart 184:10 Renderer._renderWithValue
package:mustache/src/renderer.dart 130:7 Renderer._renderSection
package:mustache/src/renderer.dart 115:7 Renderer.visitSection
package:mustache/src/node.dart 63:43 SectionNode.accept
package:mustache/src/node.dart 66:37 SectionNode.visitChildren.<fn>
dart:core List.forEach
package:mustache/src/node.dart 66:14 SectionNode.visitChildren
package:mustache/src/renderer.dart 184:10 Renderer._renderWithValue
package:mustache/src/renderer.dart 144:7 Renderer._renderSection
package:mustache/src/renderer.dart 115:7 Renderer.visitSection
package:mustache/src/node.dart 63:43 SectionNode.accept
package:mustache/src/renderer.dart 58:30 Renderer.render.<fn>
dart:core List.forEach
package:mustache/src/renderer.dart 58:13 Renderer.render
package:mustache/src/template.dart 40:14 Template.render
package:mustache/src/template.dart 33:5 Template.renderString
package:dartdoc/src/html/html_generator_instance.dart 414:31 HtmlGeneratorInstance._build
package:dartdoc/src/html/html_generator_instance.dart 312:5 HtmlGeneratorInstance.generateExtension
package:dartdoc/src/html/html_generator_instance.dart 175:11 HtmlGeneratorInstance._generateDocs
package:dartdoc/src/html/html_generator_instance.dart 37:7 HtmlGeneratorInstance.generate
dart:async _AsyncAwaitCompleter.start
package:dartdoc/src/html/html_generator_instance.dart 35:18 HtmlGeneratorInstance.generate
package:dartdoc/src/html/html_generator.dart 117:23 HtmlGenerator.generate
dart:async _AsyncAwaitCompleter.start
package:dartdoc/src/html/html_generator.dart 83:18 HtmlGenerator.generate
package:dartdoc/dartdoc.dart 107:25 Dartdoc.generateDocsBase
dart:async _completeOnAsyncReturn
package:dartdoc/src/model.dart PackageBuilder.buildPackageGraph
拡張メソッドへのリンクの解決に関して、いくつかの欠落しているケースがあるようです。 これらをに追加しようとします。
ドキュメント参照を介して拡張メソッドまたはそのパラメータを参照しているほとんどの場合は実装されていないようであり、クラッシュするリスクがあります。 バグをP0に昇格させます。
@ jcollins-gこれはD26のブロッカーになる可能性があります。これは、すべてのツールが拡張メソッドをサポートする必要があり、コアライブラリ(特にdart:ffi
)が現在拡張メソッドを使用しているためです(dartdocは失敗します)。
これは、拡張メンバーへの単なる参照ではなく、そのようなドキュメント内の参照であるように見えます。
両方:
extension Foo on int {
/// Returns [toRadixString] or something.
String toHexString() => toRadixString(16);
}
と
extension Foo on int {
/// Returns [int.toRadixString] or something.
String toHexString() => toRadixString(16);
}
クラッシュ。 どちらも拡張メンバーを参照しませんが、拡張のコンテキストに関連して識別子を解決する必要があります。
はい、拡張メソッドの参照を含むすべてが壊れています。 今日は、まだ実装されていないパッチを適用するためのPRがあります。
コメント参照ルックアップの書き直しと実装の開始のための設計がありますが、大きな部分であるため、これは他の新機能の作業に遅れをとっています。
警告を黙らせるだけの一時的な強盗をここで行うことができる可能性はありますか? Flutterコードベースに拡張メソッドをコミットしようとしていますが、このバグにより、コミットできなくなります(すべてのドキュメントも必要になるため)。 (皮肉なことに、私たちは一般的に拡張メソッドを許可しないので、これは通常は問題ではありませんが、この場合は特に非推奨の移行支援です...)
警告を黙らせるだけの一時的な強盗をここで行うことができる可能性はありますか? Flutterコードベースに拡張メソッドをコミットしようとしていますが、このバグにより、コミットできなくなります(すべてのドキュメントも必要になるため)。 (皮肉なことに、私たちは一般的に拡張メソッドを許可しないので、これは通常は問題ではありませんが、この場合は特に非推奨の移行支援です...)
警告を消音するには、dartdocで「実装されていない」警告を無効にすることができます。 現在、この問題にのみ使用されています。
ああすごい、ありがとう。
ハイパーリンク自体がまだ解決されていないため、これは機能しませんでした。 :-)とにかく、今はハイパーリンクを削除します。
これはdartdoc1.0.0で修正されました。
最も参考になるコメント
コメント参照ルックアップの書き直しと実装の開始のための設計がありますが、大きな部分であるため、これは他の新機能の作業に遅れをとっています。