Skip to content

Commit 62e25f1

Browse files
authored
Write basic parser for comment references (#2634)
* Write a basic parser for comment references * Add some simpler cases * review comments
1 parent 56fb1da commit 62e25f1

File tree

4 files changed

+432
-2
lines changed

4 files changed

+432
-2
lines changed

lib/src/comment_references/model_comment_reference.dart

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,39 @@
55
import 'package:analyzer/dart/ast/ast.dart';
66
import 'package:analyzer/dart/element/element.dart';
77
import 'package:analyzer/file_system/file_system.dart';
8+
import 'package:dartdoc/src/comment_references/parser.dart';
89
import 'package:dartdoc/src/model_utils.dart';
910

11+
abstract class ModelCommentReference {
12+
String get codeRef;
13+
Element get staticElement;
14+
15+
/// Construct a [ModelCommentReference] using the analyzer AST.
16+
factory ModelCommentReference(
17+
CommentReference ref, ResourceProvider resourceProvider) =>
18+
_ModelCommentReferenceImpl(ref, resourceProvider);
19+
20+
/// Construct a [ModelCommentReference] given a raw string.
21+
factory ModelCommentReference.synthetic(String codeRef, Element element) =>
22+
_ModelCommentReferenceImpl.synthetic(codeRef, element);
23+
}
24+
1025
/// A stripped down analyzer AST [CommentReference] containing only that
1126
/// information needed for Dartdoc. Drops link to the [CommentReference]
1227
/// and [ResourceProvider] after construction.
13-
class ModelCommentReference {
28+
class _ModelCommentReferenceImpl implements ModelCommentReference {
29+
@override
1430
final String codeRef;
31+
@override
1532
final Element staticElement;
1633

17-
ModelCommentReference(CommentReference ref, ResourceProvider resourceProvider)
34+
_ModelCommentReferenceImpl(
35+
CommentReference ref, ResourceProvider resourceProvider)
1836
: codeRef = _referenceText(ref, resourceProvider),
1937
staticElement = ref.identifier.staticElement;
2038

39+
_ModelCommentReferenceImpl.synthetic(this.codeRef, this.staticElement);
40+
2141
/// "Unparse" the code reference into the raw text associated with the
2242
/// [CommentReference].
2343
static String _referenceText(
@@ -26,4 +46,6 @@ class ModelCommentReference {
2646
(ref.root as CompilationUnit).declaredElement, resourceProvider);
2747
return contents.substring(ref.offset, ref.end);
2848
}
49+
50+
List<CommentReferenceNode> parse() => CommentReferenceParser(codeRef).parse();
2951
}

0 commit comments

Comments
 (0)