Skip to content

Commit 25d182f

Browse files
committed
Merge HasLocation into Warnable
1 parent e644857 commit 25d182f

File tree

10 files changed

+40
-54
lines changed

10 files changed

+40
-54
lines changed

lib/src/model/accessor.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ class Accessor extends ModelElement {
104104
void warn(
105105
PackageWarning kind, {
106106
String? message,
107-
Iterable<HasLocation> referredFrom = const [],
107+
Iterable<Warnable> referredFrom = const [],
108108
Iterable<String> extendedDebug = const [],
109109
}) {
110110
enclosingCombo.warn(kind,

lib/src/model/category.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ final class Category extends LibraryContainer
9292
PackageGraph get packageGraph => package.packageGraph;
9393

9494
@override
95-
List<HasLocation> get documentationFrom => [this];
95+
List<Warnable> get documentationFrom => [this];
9696

9797
@override
9898
DocumentLocation get documentedWhere => package.documentedWhere;

lib/src/model/documentation_comment.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import 'package:crypto/crypto.dart' as crypto;
1111
import 'package:dartdoc/src/model/documentable.dart';
1212
import 'package:dartdoc/src/model/documentation.dart';
1313
import 'package:dartdoc/src/model/inheritable.dart';
14-
import 'package:dartdoc/src/model/locatable.dart';
1514
import 'package:dartdoc/src/model/model_element.dart';
1615
import 'package:dartdoc/src/model/source_code_mixin.dart';
1716
import 'package:dartdoc/src/utils.dart';
@@ -38,8 +37,7 @@ final _htmlInjectRegExp = RegExp(r'<dartdoc-html>([a-f0-9]+)</dartdoc-html>');
3837
///
3938
/// [_processCommentWithoutTools] and [processComment] are the primary
4039
/// entrypoints.
41-
mixin DocumentationComment
42-
implements Documentable, Warnable, HasLocation, SourceCode {
40+
mixin DocumentationComment implements Documentable, Warnable, SourceCode {
4341
@override
4442
Element get element;
4543

lib/src/model/locatable.dart

Lines changed: 0 additions & 38 deletions
This file was deleted.

lib/src/model/model.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ export 'inheritable.dart';
2525
export 'inheriting_container.dart';
2626
export 'library.dart';
2727
export 'library_container.dart';
28-
export 'locatable.dart';
2928
export 'method.dart';
3029
export 'mixin.dart';
3130
export 'model_element.dart';

lib/src/model/model_element.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ import 'package:path/path.dart' as p show Context;
5858
/// public interface perspective.
5959
abstract class ModelElement
6060
with CommentReferable, Warnable, Nameable, SourceCode, DocumentationComment
61-
implements Comparable<ModelElement>, Documentable, HasLocation {
61+
implements Comparable<ModelElement>, Documentable {
6262
// TODO(jcollins-g): This really wants a "member that has a type" class.
6363
final Element? _originalMember;
6464
final Library _library;

lib/src/model/package.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ final class Package extends LibraryContainer
104104
String? get belowSidebarPath => null;
105105

106106
@override
107-
List<HasLocation> get documentationFrom => [this];
107+
List<Warnable> get documentationFrom => [this];
108108

109109
/// Return true if the code has defined non-default categories for libraries
110110
/// in this package.

lib/src/model/package_graph.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ class PackageGraph with CommentReferable, Nameable {
388388

389389
void warnOnElement(Warnable? warnable, PackageWarning kind,
390390
{String? message,
391-
Iterable<HasLocation> referredFrom = const [],
391+
Iterable<Warnable> referredFrom = const [],
392392
Iterable<String> extendedDebug = const []}) {
393393
var newEntry = (warnable?.element, kind, message);
394394
if (_warnAlreadySeen.contains(newEntry)) {
@@ -406,7 +406,7 @@ class PackageGraph with CommentReferable, Nameable {
406406

407407
void _warnOnElement(Warnable? warnable, PackageWarning kind,
408408
{required String message,
409-
Iterable<HasLocation> referredFrom = const [],
409+
Iterable<Warnable> referredFrom = const [],
410410
Iterable<String> extendedDebug = const []}) {
411411
if (warnable is ModelElement && kind == PackageWarning.ambiguousReexport) {
412412
// This sort of warning is only applicable to top level elements.
@@ -468,7 +468,7 @@ class PackageGraph with CommentReferable, Nameable {
468468
warningMessage,
469469
if (warnable != null) kind.messageForWarnable(warnable),
470470
for (var referral in referredFrom)
471-
if (referral != warnable) kind.messageForReferral(referral),
471+
if (referral != warnable) kind.messageForWarnable(referral),
472472
if (config.verboseWarnings) ...extendedDebug.map((s) => ' $s')
473473
].join('\n ');
474474

lib/src/validator.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import 'package:analyzer/file_system/file_system.dart';
99
import 'package:collection/collection.dart';
1010
import 'package:dartdoc/src/dartdoc_options.dart';
1111
import 'package:dartdoc/src/logging.dart';
12-
import 'package:dartdoc/src/model/locatable.dart';
1312
import 'package:dartdoc/src/model/model_element.dart';
1413
import 'package:dartdoc/src/model/package_graph.dart';
1514
import 'package:dartdoc/src/runtime_stats.dart';
@@ -236,7 +235,7 @@ class Validator {
236235
String origin, {
237236
String? referredFrom,
238237
}) {
239-
final referredFromElements = <HasLocation>{};
238+
final referredFromElements = <Warnable>{};
240239

241240
// Make all paths relative to origin.
242241
if (path.isWithin(origin, warnOn)) {

lib/src/warnings.dart

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import 'package:dartdoc/src/model/comment_referable.dart';
1414
import 'package:dartdoc/src/model/model.dart';
1515
import 'package:dartdoc/src/package_meta.dart';
1616
import 'package:dartdoc/src/utils.dart';
17+
import 'package:meta/meta.dart';
1718

1819
const _namePlaceholder = '@@name@@';
1920

@@ -94,13 +95,13 @@ List<DartdocOption<Object?>> createPackageWarningOptions(
9495

9596
/// Something that package warnings can be reported on. Optionally associated
9697
/// with an analyzer [element].
97-
mixin Warnable implements CommentReferable, Documentable, HasLocation {
98+
mixin Warnable implements CommentReferable, Documentable {
9899
Element? get element;
99100

100101
void warn(
101102
PackageWarning kind, {
102103
String? message,
103-
Iterable<HasLocation> referredFrom = const [],
104+
Iterable<Warnable> referredFrom = const [],
104105
Iterable<String> extendedDebug = const [],
105106
}) {
106107
packageGraph.warnOnElement(this, kind,
@@ -112,6 +113,28 @@ mixin Warnable implements CommentReferable, Documentable, HasLocation {
112113
/// Whether [documentationFrom] contains only one item, `this`.
113114
bool get documentationIsLocal =>
114115
documentationFrom.length == 1 && identical(documentationFrom.first, this);
116+
117+
/// The [Warnable]s from which we will get documentation.
118+
///
119+
/// Can be more than one if this is a [Field] composing documentation from
120+
/// multiple [Accessor]s.
121+
///
122+
/// This will walk up the inheritance hierarchy to find docs, if the current
123+
/// class doesn't have docs for this element.
124+
List<Warnable> get documentationFrom;
125+
126+
/// The URI of this [Warnable].
127+
@visibleForOverriding
128+
String get location;
129+
130+
/// Whether this is the "canonical" copy of an element.
131+
///
132+
/// Generally, a canonical element must be public, along with possibly other
133+
/// requirements.
134+
///
135+
/// In order for an element to be documented, it must be canonical, and have
136+
/// documentation.
137+
bool get isCanonical;
115138
}
116139

117140
/// The kinds of warnings that can be displayed when documenting a package.
@@ -330,7 +353,7 @@ enum PackageWarning implements Comparable<PackageWarning> {
330353
String messageForWarnable(Warnable warnable) =>
331354
'$_warnablePrefix ${warnable.safeWarnableName}: ${warnable.location}';
332355

333-
String messageForReferral(HasLocation referral) =>
356+
String messageForReferral(Warnable referral) =>
334357
'$_referredFromPrefix ${referral.safeWarnableName}: ${referral.location}';
335358
}
336359

@@ -659,3 +682,8 @@ extension on Map<PackageWarning, int> {
659682
}
660683
}
661684
}
685+
686+
extension NullableWarnableExtension on Warnable? {
687+
String get safeWarnableName =>
688+
this?.fullyQualifiedName.replaceFirst(':', '-') ?? '<unknown>';
689+
}

0 commit comments

Comments
 (0)