# AliasesShouldFollowStandardConventionRule.java

    package org.thewonderlemming.c4plantuml.linter.rules.builtin;

    import java.util.Optional;

    import org.antlr.v4.runtime.Parser;
    import org.antlr.v4.runtime.tree.ParseTreeListener;
    import org.thewonderlemming.c4plantuml.commons.Reporter;
    import org.thewonderlemming.c4plantuml.linter.rules.RuleParameters;

    /**
     * A linting rule that checks that the aliases comply to a given regular expression.
     *
     * @author thewonderlemming
     *
     */
    public class AliasesShouldFollowStandardConventionRule extends AbstractC4Rule {

        /**
         * The default regular expression to use for the aliases if no format is passed as a parameter of the rule.
         */
        public static final String ALIAS_DEFAULT_FORMAT = "^[a-zA-Z_-]+$";

        private final String aliasFormat;

        /**
         * Returns the name of the parameter that needs to be set to override the default value of the aliases regular
         * expression {@link AliasesShouldFollowStandardConventionRule#ALIAS_DEFAULT_FORMAT}.
         *
         * @return the name of the parameter that controls the aliases regular expression value.
         */
        public static String getAliasFormatParameterName() {
            return AliasesShouldFollowStandardConventionRule.class.getSimpleName() + ".aliasDefaultFormatRegex";
        }

        /**
         * Default constructor.
         *
         * @param parameters the {@link RuleParameters} that are passed to control the behavior of this rule.
         */
        public AliasesShouldFollowStandardConventionRule(final RuleParameters parameters) {

            super(parameters);

            final Optional<String> optionalAliasFormat = parameters.getParameter(getAliasFormatParameterName());
            this.aliasFormat = optionalAliasFormat.isPresent()
                ? optionalAliasFormat.get()
                : ALIAS_DEFAULT_FORMAT;
        }

        /**
         * {@inheritDoc}
         * <p>
         * Creates a {@link AliasesShouldFollowStandardConventionListener} instance as a listener.
         */
        @Override
        public Optional<? extends ParseTreeListener> createParseTreeListener(final Reporter reporter,
            final Class<? extends Parser> parserType) {

            return this.acceptableParsersTypes().contains(parserType)
                ? Optional.of(new AliasesShouldFollowStandardConventionListener(this, reporter, this.aliasFormat))
                : Optional.empty();
        }
    }