private Optional<ValidationEvent> detectSensitiveTerms(String name, Shape shape) {
        Optional<String> matchedTerm = wordMatcher.getFirstMatch(name);

        if (matchedTerm.isPresent()) {
            String message = shape.isMemberShape()
                    ? String.format("This member possibly contains sensitive data but neither the enclosing nor target"
                            + " shape are marked with the sensitive trait (based on the presence of '%s')",
                            matchedTerm.get())
                    : String.format("This shape possibly contains sensitive data but is not marked "
                            + "with the sensitive trait (based on the presence of '%s')", matchedTerm.get());
            return Optional.of(warning(shape, message));
        } else {
            return Optional.empty();
        }
    }
Finds shapes without the sensitive trait that possibly contain sensitive data,
based on the shape/member name and the list of key words and phrases.

@param model Model to validate.
@return list of violation events
smithy-linters/src/main/java/software/amazon/smithy/linters/MissingSensitiveTraitValidator.java