From c05127125daf8a2c7734cb47907ce88dc2670a5b Mon Sep 17 00:00:00 2001 From: Kallen Tu Date: Mon, 26 Feb 2024 23:01:30 +0000 Subject: [PATCH] Remove LanguageFeatureRenderer. --- lib/src/model/container_modifiers.dart | 6 +-- lib/src/model/inheriting_container.dart | 5 +- lib/src/model/language_feature.dart | 35 ++++++++++--- lib/src/render/language_feature_renderer.dart | 49 ------------------- test/container_modifiers_test.dart | 16 ++---- 5 files changed, 35 insertions(+), 76 deletions(-) delete mode 100644 lib/src/render/language_feature_renderer.dart diff --git a/lib/src/model/container_modifiers.dart b/lib/src/model/container_modifiers.dart index 6472054e55..fed36a2561 100644 --- a/lib/src/model/container_modifiers.dart +++ b/lib/src/model/container_modifiers.dart @@ -3,7 +3,6 @@ // BSD-style license that can be found in the LICENSE file. import 'package:dartdoc/src/model/language_feature.dart'; -import 'package:dartdoc/src/render/language_feature_renderer.dart'; /// Represents a single modifier applicable to containers. class ContainerModifier implements Comparable { @@ -46,8 +45,7 @@ class ContainerModifier implements Comparable { extension BuildLanguageFeatureSet on Iterable { /// Transforms [ContainerModifiers] into a series of [LanguageFeature] objects /// suitable for rendering as chips. Assumes iterable is sorted. - Iterable asLanguageFeatureSet( - LanguageFeatureRenderer languageFeatureRenderer) => + Iterable get asLanguageFeatureSet => where((m) => !m.hideIfPresent.any(contains)) - .map((m) => LanguageFeature(m.name, languageFeatureRenderer)); + .map((m) => LanguageFeature(m.name)); } diff --git a/lib/src/model/inheriting_container.dart b/lib/src/model/inheriting_container.dart index 5ca54ac93a..ad70782f9f 100644 --- a/lib/src/model/inheriting_container.dart +++ b/lib/src/model/inheriting_container.dart @@ -11,7 +11,6 @@ import 'package:dartdoc/src/model/container_modifiers.dart'; import 'package:dartdoc/src/model/language_feature.dart'; import 'package:dartdoc/src/model/model.dart'; import 'package:dartdoc/src/model_utils.dart' as model_utils; -import 'package:dartdoc/src/render/language_feature_renderer.dart'; import 'package:meta/meta.dart'; /// A mixin to build an [InheritingContainer] capable of being constructed @@ -99,9 +98,7 @@ abstract class InheritingContainer extends Container @override late final List displayedLanguageFeatures = - containerModifiers - .asLanguageFeatureSet(const LanguageFeatureRendererHtml()) - .toList(); + containerModifiers.asLanguageFeatureSet.toList(); late final List _allModelElements = () { _inheritedElementsCache = _inheritedElements; diff --git a/lib/src/model/language_feature.dart b/lib/src/model/language_feature.dart index 50b90001b8..611900a2e4 100644 --- a/lib/src/model/language_feature.dart +++ b/lib/src/model/language_feature.dart @@ -2,8 +2,6 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -import 'package:dartdoc/src/render/language_feature_renderer.dart'; - const Map _featureDescriptions = { 'sealed': 'The direct subtypes of this class will be checked for exhaustiveness in switches.', @@ -35,13 +33,36 @@ class LanguageFeature { String? get featureUrl => _featureUrls[name]; /// The rendered label for this language feature. - String get featureLabel => _featureRenderer.renderLanguageFeatureLabel(this); + String get featureLabel { + final buffer = StringBuffer(); + final url = featureUrl; + + if (url != null) { + buffer.write(''); + buffer.write(name); + + if (url != null) { + buffer.write(''); + } else { + buffer.write(''); + } + + return buffer.toString(); + } /// The name of this language feature. final String name; - final LanguageFeatureRenderer _featureRenderer; - - LanguageFeature(this.name, this._featureRenderer) - : assert(_featureDescriptions.containsKey(name)); + LanguageFeature(this.name) : assert(_featureDescriptions.containsKey(name)); } diff --git a/lib/src/render/language_feature_renderer.dart b/lib/src/render/language_feature_renderer.dart deleted file mode 100644 index 44c022aaaf..0000000000 --- a/lib/src/render/language_feature_renderer.dart +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -import 'package:dartdoc/src/model/language_feature.dart'; - -/// A renderer for a [LanguageFeature]. -abstract class LanguageFeatureRenderer { - const LanguageFeatureRenderer(); - - /// Render the label of this [feature]. - String renderLanguageFeatureLabel(LanguageFeature feature); -} - -/// A HTML renderer for a [LanguageFeature]. -class LanguageFeatureRendererHtml extends LanguageFeatureRenderer { - const LanguageFeatureRendererHtml(); - - @override - String renderLanguageFeatureLabel(LanguageFeature feature) { - final buffer = StringBuffer(); - final url = feature.featureUrl; - - if (url != null) { - buffer.write(''); - buffer.write(name); - - if (url != null) { - buffer.write(''); - } else { - buffer.write(''); - } - - return buffer.toString(); - } -} diff --git a/test/container_modifiers_test.dart b/test/container_modifiers_test.dart index a952a962e9..c866df9b91 100644 --- a/test/container_modifiers_test.dart +++ b/test/container_modifiers_test.dart @@ -4,16 +4,10 @@ import 'package:dartdoc/src/model/container_modifiers.dart'; import 'package:dartdoc/src/model/language_feature.dart'; -import 'package:dartdoc/src/render/language_feature_renderer.dart'; import 'package:test/test.dart'; -class TestChipRenderer extends LanguageFeatureRenderer { - @override - String renderLanguageFeatureLabel(LanguageFeature l) => l.name; -} - extension TestChipsRenderer on Iterable { - String asRenderedString() => map((l) => l.featureLabel).join(' '); + String asRenderedString() => map((l) => l.name).join(' '); } void main() { @@ -24,20 +18,18 @@ void main() { ContainerModifier.interface, ContainerModifier.abstract ]..sort(); - expect(l.asLanguageFeatureSet(TestChipRenderer()).asRenderedString(), + expect(l.asLanguageFeatureSet.asRenderedString(), equals('abstract base interface')); }); test('hide abstract on sealed', () { var l = [ContainerModifier.abstract, ContainerModifier.sealed]..sort(); - expect(l.asLanguageFeatureSet(TestChipRenderer()).asRenderedString(), - equals('sealed')); + expect(l.asLanguageFeatureSet.asRenderedString(), equals('sealed')); }); test('empty', () { var l = []; - expect(l.asLanguageFeatureSet(TestChipRenderer()).asRenderedString(), - equals('')); + expect(l.asLanguageFeatureSet.asRenderedString(), equals('')); }); }); }