structlint uses YAML or JSON configuration files to define validation rules.
By default, structlint looks for:
--configflag valueSTRUCTLINT_CONFIGenvironment variable.structlint.yamlin current directory.structlint.ymlin current directory.structlint.jsonin current directory
dir_structure:
allowedPaths: [] # Glob patterns for allowed directories
disallowedPaths: [] # Glob patterns for disallowed directories
requiredPaths: [] # Directories that must exist
file_naming_pattern:
allowed: [] # Glob patterns for allowed files
disallowed: [] # Glob patterns for disallowed files
required: [] # Files that must exist (supports globs)
ignore: [] # Paths to skip during validationstructlint supports standard glob patterns:
| Pattern | Description |
|---|---|
* |
Matches any sequence of characters (not including /) |
** |
Matches any sequence including / (recursive) |
? |
Matches any single character |
[abc] |
Matches any character in the set |
[!abc] |
Matches any character not in the set |
allowedPaths:
- "." # Root directory only
- "cmd/**" # cmd/ and all subdirectories
- "src/*.go" # Go files directly in src/
- "test/*" # Direct children of test/Directories that are permitted. If specified, any directory not matching these patterns is a violation.
dir_structure:
allowedPaths:
- "."
- "cmd/**"
- "internal/**"
- "pkg/**"
- "test/**"Directories that are explicitly forbidden.
dir_structure:
disallowedPaths:
- "vendor/**"
- "node_modules/**"
- "tmp/**"
- ".cache/**"Directories that must exist.
dir_structure:
requiredPaths:
- "cmd"
- "internal"
- "docs"File patterns that are permitted.
file_naming_pattern:
allowed:
- "*.go"
- "*.yaml"
- "*.yml"
- "*.json"
- "*.md"
- "Makefile"
- "Dockerfile*"
- ".gitignore"File patterns that are forbidden.
file_naming_pattern:
disallowed:
- "*.env*"
- "*.log"
- "*.tmp"
- "*~"
- "*.bak"Files that must exist.
file_naming_pattern:
required:
- "go.mod"
- "README.md"
- ".gitignore"
- "*.go" # At least one Go filePaths to completely skip during validation.
ignore:
- ".git"
- "vendor"
- "node_modules"
- "bin"
- "dist"
- ".idea"
- ".vscode"# .structlint.yaml - Go Project Configuration
dir_structure:
allowedPaths:
- "."
- "cmd/**"
- "internal/**"
- "pkg/**"
- "api/**"
- "web/**"
- "configs/**"
- "scripts/**"
- "test/**"
- "docs/**"
- ".github/**"
disallowedPaths:
- "vendor/**"
- "node_modules/**"
- "tmp/**"
- "temp/**"
requiredPaths:
- "cmd"
- "internal"
file_naming_pattern:
allowed:
- "*.go"
- "*.mod"
- "*.sum"
- "*.yaml"
- "*.yml"
- "*.json"
- "*.toml"
- "*.md"
- "*.txt"
- "Makefile"
- "Dockerfile*"
- ".gitignore"
- ".golangci.yml"
- "go.work"
disallowed:
- "*.env*"
- "*.log"
- "*.tmp"
- "*~"
- "*.swp"
- ".DS_Store"
required:
- "go.mod"
- "README.md"
- ".gitignore"
ignore:
- ".git"
- "vendor"
- "bin"
- "dist"
- ".idea"
- ".vscode"All configuration options can be overridden via environment variables:
| Variable | Description |
|---|---|
STRUCTLINT_CONFIG |
Path to configuration file |
STRUCTLINT_LOG_LEVEL |
Log level (debug, info, warn, error) |
STRUCTLINT_NO_COLOR |
Disable colored output |