diff --git a/.ddev/commands/web/phpstan b/.ddev/commands/web/phpstan index cd4ea2e82..1270a711f 100755 --- a/.ddev/commands/web/phpstan +++ b/.ddev/commands/web/phpstan @@ -4,4 +4,10 @@ ## Usage: phpstan ## Example: "ddev phpstan" -PHP_MEMORY_LIMIT=2G ./vendor/bin/phpstan --no-progress analyse -c phpstan.neon +if [ $# -eq 0 ]; then + # No arguments provided, run default analyse command + PHP_MEMORY_LIMIT=2G ./vendor/bin/phpstan --no-progress analyse -c phpstan.neon +else + # Arguments provided, pass them through with configuration + PHP_MEMORY_LIMIT=2G ./vendor/bin/phpstan "$@" -c phpstan.neon +fi diff --git a/phpstan-rules/NoRedundantTraitUseRule.php b/phpstan-rules/NoRedundantTraitUseRule.php new file mode 100644 index 000000000..ccce16451 --- /dev/null +++ b/phpstan-rules/NoRedundantTraitUseRule.php @@ -0,0 +1,175 @@ + + */ +class NoRedundantTraitUseRule implements Rule { + + private const ERROR_MESSAGE = 'Class uses trait "%s" redundantly as it is already included via trait "%s".'; + + /** + * The reflection provider. + * + * @var \PHPStan\Reflection\ReflectionProvider + */ + private ReflectionProvider $reflectionProvider; + + /** + * Constructs a new NoRedundantTraitUseRule. + * + * @param \PHPStan\Reflection\ReflectionProvider $reflectionProvider + * The reflection provider. + */ + public function __construct(ReflectionProvider $reflectionProvider) { + $this->reflectionProvider = $reflectionProvider; + } + + /** + * {@inheritdoc} + */ + public function getNodeType(): string { + return Class_::class; + } + + /** + * {@inheritdoc} + */ + public function processNode(Node $node, Scope $scope): array { + $errors = []; + + // Get all trait use statements from the class. + $traitUseNodes = array_filter($node->stmts, static fn ($stmt): bool => $stmt instanceof TraitUse); + + if (count($traitUseNodes) < 2) { + // Need at least 2 traits to have redundancy. + return []; + } + + // Collect all directly used trait names with their resolved names. + $directlyUsedTraits = []; + foreach ($traitUseNodes as $traitUseNode) { + foreach ($traitUseNode->traits as $trait) { + $traitName = $scope->resolveName($trait); + $directlyUsedTraits[] = $traitName; + } + } + + // Build a map of trait -> [traits it uses] with full resolution. + $traitDependencies = []; + foreach ($directlyUsedTraits as $traitName) { + try { + if ($this->reflectionProvider->hasClass($traitName)) { + $traitReflection = $this->reflectionProvider->getClass($traitName); + if ($traitReflection->isTrait()) { + $traitDependencies[$traitName] = $this->getAllTraitsUsedByTrait($traitName, []); + } + } + } + catch (\Throwable $e) { + // Skip traits that can't be reflected. + continue; + } + } + + // Check for redundancies. + foreach ($directlyUsedTraits as $traitA) { + foreach ($directlyUsedTraits as $traitB) { + if ($traitA === $traitB) { + continue; + } + + // Check if traitA uses traitB (directly or transitively). + if (isset($traitDependencies[$traitA]) && in_array($traitB, $traitDependencies[$traitA], TRUE)) { + $shortNameA = basename(str_replace('\\', '/', $traitA)); + $shortNameB = basename(str_replace('\\', '/', $traitB)); + + $errors[] = RuleErrorBuilder::message(sprintf(self::ERROR_MESSAGE, $shortNameB, $shortNameA)) + ->line($node->getStartLine()) + ->identifier('traits.redundantTraitUse') + ->build(); + + // Only report each redundant trait once. + break; + } + } + } + + return $errors; + } + + /** + * Get all traits used by a given trait recursively. + * + * @param string $traitName + * The fully qualified trait name. + * @param array $visited + * Array to track visited traits (for cycle detection). + * + * @return array + * Array of all trait names used by the given trait (directly and + * transitively). + */ + private function getAllTraitsUsedByTrait(string $traitName, array $visited = []): array { + // Prevent infinite loops. + if (in_array($traitName, $visited, TRUE)) { + return []; + } + + $visited[] = $traitName; + + try { + if (!$this->reflectionProvider->hasClass($traitName)) { + return []; + } + + $traitReflection = $this->reflectionProvider->getClass($traitName); + if (!$traitReflection->isTrait()) { + return []; + } + + $allTraits = []; + + // Get direct traits used by this trait. + foreach ($traitReflection->getTraits() as $trait) { + $usedTraitName = $trait->getName(); + $allTraits[] = $usedTraitName; + + // Recursively get traits used by the used trait. + $nestedTraits = $this->getAllTraitsUsedByTrait($usedTraitName, $visited); + $allTraits = array_merge($allTraits, $nestedTraits); + } + + return array_unique($allTraits); + } + catch (\Throwable $e) { + return []; + } + } + +} diff --git a/phpstan-rules/phpstan-extension.neon b/phpstan-rules/phpstan-extension.neon index 8174b7dbd..fe6c57c38 100644 --- a/phpstan-rules/phpstan-extension.neon +++ b/phpstan-rules/phpstan-extension.neon @@ -16,3 +16,7 @@ services: class: Drupal\PHPStan\Custom\CacheableDependency tags: - phpstan.rules.rule + - + class: Drupal\PHPStan\Custom\NoRedundantTraitUseRule + tags: + - phpstan.rules.rule diff --git a/robo-components/DeploymentTrait.php b/robo-components/DeploymentTrait.php index 4c3219d4d..1ce56744b 100644 --- a/robo-components/DeploymentTrait.php +++ b/robo-components/DeploymentTrait.php @@ -54,6 +54,7 @@ trait DeploymentTrait { 'ci-scripts', 'pantheon.upstream.yml', 'phpstan.neon', + 'phpstan-rules', 'phpunit.xml.dist', 'README.md', 'RoboFile.php', diff --git a/robo-components/TranslationManagement/ImportToUi.php b/robo-components/TranslationManagement/ImportToUi.php index f62f9c29a..b1dede2ab 100644 --- a/robo-components/TranslationManagement/ImportToUi.php +++ b/robo-components/TranslationManagement/ImportToUi.php @@ -3,7 +3,6 @@ namespace RoboComponents\TranslationManagement; use Robo\ResultData; -use RoboComponents\DeploymentTrait; /** * Logic to import translations into Drupal UI translations. @@ -12,8 +11,6 @@ */ trait ImportToUi { - use DeploymentTrait; - /** * Import the interface translations from a PO file. * diff --git a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/MediaImage.php b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/MediaImage.php index a82577c1e..3654cc50c 100644 --- a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/MediaImage.php +++ b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/MediaImage.php @@ -7,7 +7,6 @@ use Drupal\media\MediaInterface; use Drupal\pluggable_entity_view_builder\EntityViewBuilderPluginAbstract; use Drupal\server_general\ThemeTrait\ElementMediaThemeTrait; -use Drupal\server_general\ThemeTrait\ElementWrapThemeTrait; /** * The "Media: Image" plugin. @@ -21,7 +20,6 @@ class MediaImage extends EntityViewBuilderPluginAbstract { use ElementMediaThemeTrait; - use ElementWrapThemeTrait; /** * The iFrame URL helper service. diff --git a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/MediaVideo.php b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/MediaVideo.php index e5cae2086..ecd9f2b29 100644 --- a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/MediaVideo.php +++ b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/MediaVideo.php @@ -7,7 +7,6 @@ use Drupal\media\MediaInterface; use Drupal\pluggable_entity_view_builder\EntityViewBuilderPluginAbstract; use Drupal\server_general\ThemeTrait\ElementMediaThemeTrait; -use Drupal\server_general\ThemeTrait\ElementWrapThemeTrait; use Symfony\Component\DependencyInjection\ContainerInterface; /** @@ -22,7 +21,6 @@ class MediaVideo extends EntityViewBuilderPluginAbstract { use ElementMediaThemeTrait; - use ElementWrapThemeTrait; // Update from design as needed. const VIDEO_FULL_MAX_WIDTH = 1920; diff --git a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/NodeNews.php b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/NodeNews.php index 5df6d619b..0253e387d 100644 --- a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/NodeNews.php +++ b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/NodeNews.php @@ -4,17 +4,12 @@ use Drupal\media\MediaInterface; use Drupal\node\NodeInterface; -use Drupal\server_general\EntityDateTrait; use Drupal\server_general\EntityViewBuilder\NodeViewBuilderAbstract; use Drupal\server_general\SocialShareTrait; use Drupal\server_general\TagTrait; -use Drupal\server_general\ThemeTrait\ElementLayoutThemeTrait; use Drupal\server_general\ThemeTrait\ElementNodeNewsThemeTrait; -use Drupal\server_general\ThemeTrait\LineSeparatorThemeTrait; -use Drupal\server_general\ThemeTrait\LinkThemeTrait; use Drupal\server_general\ThemeTrait\NewsTeasersThemeTrait; use Drupal\server_general\ThemeTrait\SearchThemeTrait; -use Drupal\server_general\ThemeTrait\TitleAndLabelsThemeTrait; use Symfony\Component\DependencyInjection\ContainerInterface; /** @@ -28,16 +23,11 @@ */ class NodeNews extends NodeViewBuilderAbstract { - use ElementLayoutThemeTrait; use ElementNodeNewsThemeTrait; - use EntityDateTrait; - use LineSeparatorThemeTrait; - use LinkThemeTrait; use NewsTeasersThemeTrait; use SearchThemeTrait; use SocialShareTrait; use TagTrait; - use TitleAndLabelsThemeTrait; /** * The renderer. diff --git a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphAccordion.php b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphAccordion.php index 2b93206c9..bc773724a 100644 --- a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphAccordion.php +++ b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphAccordion.php @@ -9,7 +9,6 @@ use Drupal\server_general\ProcessedTextBuilderTrait; use Drupal\server_general\ThemeTrait\AccordionThemeTrait; use Drupal\server_general\ThemeTrait\ElementLayoutThemeTrait; -use Drupal\server_general\ThemeTrait\ElementWrapThemeTrait; /** * The "Accordion" paragraph plugin. @@ -26,7 +25,6 @@ class ParagraphAccordion extends EntityViewBuilderPluginAbstract { use AccordionThemeTrait; use ElementLayoutThemeTrait; - use ElementWrapThemeTrait; use ProcessedTextBuilderTrait; /** diff --git a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphCta.php b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphCta.php index f11f463fc..acc8d658a 100644 --- a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphCta.php +++ b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphCta.php @@ -6,9 +6,7 @@ use Drupal\paragraphs\ParagraphInterface; use Drupal\pluggable_entity_view_builder\EntityViewBuilderPluginAbstract; use Drupal\server_general\ProcessedTextBuilderTrait; -use Drupal\server_general\ThemeTrait\ButtonThemeTrait; use Drupal\server_general\ThemeTrait\CtaThemeTrait; -use Drupal\server_general\ThemeTrait\ElementWrapThemeTrait; /** * The "Call to Action" paragraph plugin. @@ -21,9 +19,7 @@ */ class ParagraphCta extends EntityViewBuilderPluginAbstract { - use ButtonThemeTrait; use CtaThemeTrait; - use ElementWrapThemeTrait; use ProcessedTextBuilderTrait; /** diff --git a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphDocuments.php b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphDocuments.php index 5765cb93e..d6b52dadb 100644 --- a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphDocuments.php +++ b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphDocuments.php @@ -5,9 +5,7 @@ use Drupal\paragraphs\ParagraphInterface; use Drupal\pluggable_entity_view_builder\EntityViewBuilderPluginAbstract; use Drupal\server_general\ProcessedTextBuilderTrait; -use Drupal\server_general\ThemeTrait\ButtonThemeTrait; use Drupal\server_general\ThemeTrait\DocumentsThemeTrait; -use Drupal\server_general\ThemeTrait\ElementWrapThemeTrait; /** * The "Documents" paragraph plugin. @@ -20,9 +18,7 @@ */ class ParagraphDocuments extends EntityViewBuilderPluginAbstract { - use ButtonThemeTrait; use DocumentsThemeTrait; - use ElementWrapThemeTrait; use ProcessedTextBuilderTrait; /** diff --git a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphForm.php b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphForm.php index 0eba7e496..d1d0f814d 100644 --- a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphForm.php +++ b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphForm.php @@ -4,7 +4,6 @@ use Drupal\paragraphs\ParagraphInterface; use Drupal\pluggable_entity_view_builder\EntityViewBuilderPluginAbstract; -use Drupal\server_general\ProcessedTextBuilderTrait; use Drupal\server_general\WebformTrait; /** @@ -18,7 +17,6 @@ */ class ParagraphForm extends EntityViewBuilderPluginAbstract { - use ProcessedTextBuilderTrait; use WebformTrait; /** diff --git a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphHeroImage.php b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphHeroImage.php index 84bad9827..1d6703a74 100644 --- a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphHeroImage.php +++ b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphHeroImage.php @@ -4,9 +4,7 @@ use Drupal\Core\Link; use Drupal\paragraphs\ParagraphInterface; -use Drupal\pluggable_entity_view_builder\BuildFieldTrait; use Drupal\pluggable_entity_view_builder\EntityViewBuilderPluginAbstract; -use Drupal\server_general\ThemeTrait\ButtonThemeTrait; use Drupal\server_general\ThemeTrait\HeroThemeTrait; /** @@ -20,8 +18,6 @@ */ class ParagraphHeroImage extends EntityViewBuilderPluginAbstract { - use BuildFieldTrait; - use ButtonThemeTrait; use HeroThemeTrait; const RESPONSIVE_IMAGE_STYLE_ID = 'hero'; diff --git a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphInfoCard.php b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphInfoCard.php index 4ca94ae8d..dd291f3db 100644 --- a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphInfoCard.php +++ b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphInfoCard.php @@ -7,7 +7,6 @@ use Drupal\paragraphs\ParagraphInterface; use Drupal\pluggable_entity_view_builder\EntityViewBuilderPluginAbstract; use Drupal\server_general\ProcessedTextBuilderTrait; -use Drupal\server_general\ThemeTrait\ElementWrapThemeTrait; use Drupal\server_general\ThemeTrait\InfoCardThemeTrait; /** @@ -24,7 +23,6 @@ class ParagraphInfoCard extends EntityViewBuilderPluginAbstract { - use ElementWrapThemeTrait; use InfoCardThemeTrait; use ProcessedTextBuilderTrait; diff --git a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphInfoCards.php b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphInfoCards.php index dccf846ff..ac5d3e6c2 100644 --- a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphInfoCards.php +++ b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphInfoCards.php @@ -7,7 +7,6 @@ use Drupal\paragraphs\ParagraphInterface; use Drupal\pluggable_entity_view_builder\EntityViewBuilderPluginAbstract; use Drupal\server_general\ProcessedTextBuilderTrait; -use Drupal\server_general\ThemeTrait\ElementWrapThemeTrait; use Drupal\server_general\ThemeTrait\InfoCardThemeTrait; /** @@ -23,7 +22,6 @@ */ class ParagraphInfoCards extends EntityViewBuilderPluginAbstract { - use ElementWrapThemeTrait; use InfoCardThemeTrait; use ProcessedTextBuilderTrait; diff --git a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphPeopleTeasers.php b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphPeopleTeasers.php index dbbaf6682..2c229bf21 100644 --- a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphPeopleTeasers.php +++ b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphPeopleTeasers.php @@ -7,8 +7,6 @@ use Drupal\paragraphs\ParagraphInterface; use Drupal\pluggable_entity_view_builder\EntityViewBuilderPluginAbstract; use Drupal\server_general\ProcessedTextBuilderTrait; -use Drupal\server_general\ThemeTrait\CardThemeTrait; -use Drupal\server_general\ThemeTrait\ElementWrapThemeTrait; use Drupal\server_general\ThemeTrait\PeopleTeasersThemeTrait; /** @@ -24,8 +22,6 @@ */ class ParagraphPeopleTeasers extends EntityViewBuilderPluginAbstract { - use CardThemeTrait; - use ElementWrapThemeTrait; use PeopleTeasersThemeTrait; use ProcessedTextBuilderTrait; diff --git a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphPersonTeaser.php b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphPersonTeaser.php index 9b1edc524..55b21c9f7 100644 --- a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphPersonTeaser.php +++ b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphPersonTeaser.php @@ -7,7 +7,6 @@ use Drupal\paragraphs\ParagraphInterface; use Drupal\pluggable_entity_view_builder\EntityViewBuilderPluginAbstract; use Drupal\server_general\ProcessedTextBuilderTrait; -use Drupal\server_general\ThemeTrait\ElementWrapThemeTrait; use Drupal\server_general\ThemeTrait\PeopleTeasersThemeTrait; /** @@ -24,7 +23,6 @@ class ParagraphPersonTeaser extends EntityViewBuilderPluginAbstract { - use ElementWrapThemeTrait; use PeopleTeasersThemeTrait; use ProcessedTextBuilderTrait; diff --git a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphQuickLinkItem.php b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphQuickLinkItem.php index 9646bc402..ab9ba4987 100644 --- a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphQuickLinkItem.php +++ b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphQuickLinkItem.php @@ -7,7 +7,6 @@ use Drupal\paragraphs\ParagraphInterface; use Drupal\pluggable_entity_view_builder\EntityViewBuilderPluginAbstract; use Drupal\server_general\ProcessedTextBuilderTrait; -use Drupal\server_general\ThemeTrait\ElementWrapThemeTrait; use Drupal\server_general\ThemeTrait\QuickLinksThemeTrait; /** @@ -24,7 +23,6 @@ class ParagraphQuickLinkItem extends EntityViewBuilderPluginAbstract { - use ElementWrapThemeTrait; use ProcessedTextBuilderTrait; use QuickLinksThemeTrait; diff --git a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphQuickLinks.php b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphQuickLinks.php index 2099b47af..42ea04290 100644 --- a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphQuickLinks.php +++ b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphQuickLinks.php @@ -7,8 +7,6 @@ use Drupal\paragraphs\ParagraphInterface; use Drupal\pluggable_entity_view_builder\EntityViewBuilderPluginAbstract; use Drupal\server_general\ProcessedTextBuilderTrait; -use Drupal\server_general\ThemeTrait\CardThemeTrait; -use Drupal\server_general\ThemeTrait\ElementWrapThemeTrait; use Drupal\server_general\ThemeTrait\QuickLinksThemeTrait; /** @@ -24,8 +22,6 @@ */ class ParagraphQuickLinks extends EntityViewBuilderPluginAbstract { - use CardThemeTrait; - use ElementWrapThemeTrait; use ProcessedTextBuilderTrait; use QuickLinksThemeTrait; diff --git a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphQuote.php b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphQuote.php index f6d969cc9..4038c42e1 100644 --- a/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphQuote.php +++ b/web/modules/custom/server_general/src/Plugin/EntityViewBuilder/ParagraphQuote.php @@ -7,7 +7,6 @@ use Drupal\paragraphs\ParagraphInterface; use Drupal\pluggable_entity_view_builder\EntityViewBuilderPluginAbstract; use Drupal\server_general\ProcessedTextBuilderTrait; -use Drupal\server_general\ThemeTrait\ElementWrapThemeTrait; use Drupal\server_general\ThemeTrait\QuoteThemeTrait; /** @@ -23,7 +22,6 @@ */ class ParagraphQuote extends EntityViewBuilderPluginAbstract { - use ElementWrapThemeTrait; use ProcessedTextBuilderTrait; use QuoteThemeTrait; diff --git a/web/modules/custom/server_style_guide/src/Controller/StyleGuideController.php b/web/modules/custom/server_style_guide/src/Controller/StyleGuideController.php index 88a6acd2b..bcf62bcdf 100644 --- a/web/modules/custom/server_style_guide/src/Controller/StyleGuideController.php +++ b/web/modules/custom/server_style_guide/src/Controller/StyleGuideController.php @@ -5,33 +5,24 @@ use Drupal\Core\Controller\ControllerBase; use Drupal\Core\Link; use Drupal\Core\Url; -use Drupal\pluggable_entity_view_builder\BuildFieldTrait; use Drupal\server_general\ThemeTrait\AccordionThemeTrait; -use Drupal\server_general\ThemeTrait\ButtonThemeTrait; -use Drupal\server_general\ThemeTrait\CardThemeTrait; use Drupal\server_general\ThemeTrait\Enum\ColorEnum; use Drupal\server_general\ThemeTrait\CarouselThemeTrait; use Drupal\server_general\ThemeTrait\CtaThemeTrait; use Drupal\server_general\ThemeTrait\DocumentsThemeTrait; -use Drupal\server_general\ThemeTrait\ElementLayoutThemeTrait; use Drupal\server_general\ThemeTrait\ElementMediaThemeTrait; use Drupal\server_general\ThemeTrait\ElementNodeNewsThemeTrait; -use Drupal\server_general\ThemeTrait\ElementWrapThemeTrait; use Drupal\server_general\ThemeTrait\ExpandingTextThemeTrait; use Drupal\server_general\ThemeTrait\Enum\FontSizeEnum; use Drupal\server_general\ThemeTrait\Enum\FontWeightEnum; use Drupal\server_general\ThemeTrait\HeroThemeTrait; use Drupal\server_general\ThemeTrait\Enum\HtmlTagEnum; use Drupal\server_general\ThemeTrait\InfoCardThemeTrait; -use Drupal\server_general\ThemeTrait\LinkThemeTrait; use Drupal\server_general\ThemeTrait\NewsTeasersThemeTrait; use Drupal\server_general\ThemeTrait\PeopleTeasersThemeTrait; use Drupal\server_general\ThemeTrait\QuickLinksThemeTrait; use Drupal\server_general\ThemeTrait\QuoteThemeTrait; use Drupal\server_general\ThemeTrait\SearchThemeTrait; -use Drupal\server_general\ThemeTrait\SocialShareThemeTrait; -use Drupal\server_general\ThemeTrait\TagThemeTrait; -use Drupal\server_general\ThemeTrait\TitleAndLabelsThemeTrait; use Drupal\server_general\WebformTrait; use Drupal\server_style_guide\ThemeTrait\StyleGuideElementWrapThemeTrait; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -42,29 +33,20 @@ class StyleGuideController extends ControllerBase { use AccordionThemeTrait; - use BuildFieldTrait; - use ButtonThemeTrait; - use CardThemeTrait; use CarouselThemeTrait; use CtaThemeTrait; use DocumentsThemeTrait; use ElementMediaThemeTrait; use ElementNodeNewsThemeTrait; - use ElementLayoutThemeTrait; - use ElementWrapThemeTrait; use ExpandingTextThemeTrait; use HeroThemeTrait; use InfoCardThemeTrait; - use LinkThemeTrait; use NewsTeasersThemeTrait; use PeopleTeasersThemeTrait; use QuickLinksThemeTrait; use QuoteThemeTrait; use SearchThemeTrait; - use SocialShareThemeTrait; use StyleGuideElementWrapThemeTrait; - use TagThemeTrait; - use TitleAndLabelsThemeTrait; use WebformTrait;