Background
Currently, file suffix handling is inconsistent across the project:
- Gradle plugin: only searches for
.html files
- Maven plugin: searches for
.html and .htm files
- CLI: searches for
.html and .htm files (configurable via --suffix option)
The logic for discovering source documents is duplicated in each plugin/CLI implementation.
Proposed Enhancement
Make file suffixes a core configuration feature with centralized document discovery logic in AllChecksRunner.
Requirements
-
Core Configuration: Add a suffixes attribute to Configuration
- Type:
Set<String>
- Default:
["html", "htm"]
- Represents file extensions to search for (without the dot)
-
Document Discovery in AllChecksRunner:
- During
AllChecksRunner initialization (constructor or performAllChecks())
- If
sourceDocuments is null or empty AND sourceDir is set:
- Recursively scan
sourceDir for files matching configured suffixes
- Auto-populate the effective source documents for checking
- If
sourceDocuments is explicitly provided: use as-is (no auto-discovery)
-
Plugin/CLI Updates:
- Gradle plugin: Remove local file scanning (
setSourceDir() logic), delegate to core
- Maven plugin: Remove
findHtmlFiles() method, delegate to core
- CLI: Continue to support
--suffix option, pass to core Configuration.suffixes
Implementation Details
Location: Document discovery logic in AllChecksRunner class
- Keeps
Configuration as a pure data holder
- Runner already orchestrates the checking process
- Natural place for auto-discovery before checks begin
- Example approach:
public class AllChecksRunner {
private Set<File> effectiveSourceDocuments;
public AllChecksRunner(Configuration config) {
this.effectiveSourceDocuments = config.getSourceDocuments();
if ((effectiveSourceDocuments == null || effectiveSourceDocuments.isEmpty())
&& config.getSourceDir() != null) {
this.effectiveSourceDocuments = discoverSourceDocuments(
config.getSourceDir(),
config.getSuffixes()
);
}
}
private Set<File> discoverSourceDocuments(File sourceDir, Set<String> suffixes) {
// Recursive file scanning logic here
}
}
Benefits
- ✅ Consistent behavior across all interfaces (CLI, Maven, Gradle)
- ✅ Single source of truth for file discovery logic
- ✅ User-configurable suffixes (e.g., for
.xhtml, .htm5)
- ✅ Reduced code duplication
- ✅ Easier to test and maintain
- ✅ Clean separation: Configuration = data, AllChecksRunner = execution logic
Migration Path
- Add
suffixes to Configuration with default ["html", "htm"]
- Implement discovery logic in
AllChecksRunner
- Update plugins/CLI to remove local scanning and rely on core
- Deprecate plugin-specific file discovery mechanisms
- Update documentation
Background
Currently, file suffix handling is inconsistent across the project:
.htmlfiles.htmland.htmfiles.htmland.htmfiles (configurable via--suffixoption)The logic for discovering source documents is duplicated in each plugin/CLI implementation.
Proposed Enhancement
Make file suffixes a core configuration feature with centralized document discovery logic in
AllChecksRunner.Requirements
Core Configuration: Add a
suffixesattribute toConfigurationSet<String>["html", "htm"]Document Discovery in AllChecksRunner:
AllChecksRunnerinitialization (constructor orperformAllChecks())sourceDocumentsis null or empty ANDsourceDiris set:sourceDirfor files matching configuredsuffixessourceDocumentsis explicitly provided: use as-is (no auto-discovery)Plugin/CLI Updates:
setSourceDir()logic), delegate to corefindHtmlFiles()method, delegate to core--suffixoption, pass to coreConfiguration.suffixesImplementation Details
Location: Document discovery logic in
AllChecksRunnerclassConfigurationas a pure data holderBenefits
.xhtml,.htm5)Migration Path
suffixestoConfigurationwith default["html", "htm"]AllChecksRunner