This is a tool to check if your files consider your .editorconfig rules.
Most tools—like linters, for example—only test one filetype and need an extra configuration.
This tool only needs your .editorconfig to check all files.
If you don't know about editorconfig already you can read about it here: editorconfig.org.
Currently implemented editorconfig features are:
end_of_lineinsert_final_newlinetrim_trailing_whitespaceindent_styleindent_sizemax_line_length
Unsupported features are:
charset
VERSION="v3.0.3"
OS="linux"
ARCH="amd64"
curl -O -L -C - https://github.com/editorconfig-checker/editorconfig-checker/releases/download/$VERSION/ec-$OS-$ARCH.tar.gz && \
tar xzf ec-$OS-$ARCH.tar.gz && \
./bin/ec-$OS-$ARCHGrab a binary from the release page.
If you have go installed you can run go get github.com/editorconfig-checker/editorconfig-checker/v3 and run make build inside the project folder.
This will place a binary called ec into the bin directory.
If you are using Arch Linux, you can use pacman to install from extra repository:
pacman -S editorconfig-checkerAlso, development (VCS) package is available in the AUR:
# <favourite-aur-helper> <install-command> editorconfig-checker-git
# i.e.
paru -S editorconfig-checker-gitIf go 1.16 or greater is installed, you can also install it globally via go install:
go install github.com/editorconfig-checker/editorconfig-checker/v3/cmd/editorconfig-checker@latestUSAGE:
-config string
config
-debug
print debugging information
-disable-end-of-line
disables the trailing whitespace check
-disable-indent-size
disables only the indent-size check
-disable-indentation
disables the indentation check
-disable-insert-final-newline
disables the final newline check
-disable-trim-trailing-whitespace
disables the trailing whitespace check
-dry-run
show which files would be checked
-exclude string
a regex which files should be excluded from checking - needs to be a valid regular expression
-format
specifies the output format, see "Formats" below for more information
-h print the help
-help
print the help
-ignore-defaults
ignore default excludes
-init
creates an initial configuration
-no-color
dont print colors
-v print debugging information
-verbose
print debugging information
-version
print the version number
If you run this tool from a repository root it will check all files which are added to the git repository and are text files. If the tool isn't able to determine a file type it will be added to be checked too.
If you run this tool from a normal directory it will check all files which are text files. If the tool isn't able to determine a file type it will be added to be checked too.
The following output formats are supported:
- default: Plain text, human readable output.
- gcc: GCC compatible output. Useful for editors that support compiling and showing syntax errors. ::: :
The configuration is done via arguments or an .ecrc file.
A sample .ecrc file can look like this and will be used from your current working directory if not specified via the --config argument:
{
"Verbose": false,
"Debug": false,
"IgnoreDefaults": false,
"SpacesAftertabs": false,
"NoColor": false,
"Exclude": [],
"AllowedContentTypes": [],
"PassedFiles": [],
"Disable": {
"EndOfLine": false,
"Indentation": false,
"IndentSize": false,
"InsertFinalNewline": false,
"TrimTrailingWhitespace": false,
"MaxLineLength": false
}
}You can set any of the options under the "Disable" section to true to disable those particular checks.
You could also specify command line arguments and they will get merged with the configuration file, the command line arguments have a higher precedence than the configuration.
You can create a configuration with the init-flag. If you specify an config-path it will be created there.
By default the allowed_content_types are:
text/(matchestext/plain,text/html, etc.)application/ecmascriptapplication/jsonapplication/x-ndjsonapplication/xml+json(matchesapplication/geo+json, etc.)+xml(matchesapplication/rss+xml, etc.)application/octet-stream
application/octet-stream is needed as a fallback when no content type could be determined. You can add additional accepted content types with the allowed_content_types key. But the default ones don't get removed.
You can exclude single lines inline. To do that you need a comment on that line that says: editorconfig-checker-disable-line.
const myTemplateString = `
first line
wrongly indended line because it needs to be` // editorconfig-checker-disable-lineTo temporarily disable all checks, add a comment containing editorconfig-checker-disable. Re-enable with a comment containing editorconfig-checker-enable
// editorconfig-checker-disable
const myTemplateString = `
first line
wrongly indended line because it needs to be
`
// editorconfig-checker-enableIf you want to exclude a file inline you need a comment on the first line of the file that contains: editorconfig-checker-disable-file
-- editorconfig-checker-disable-file
add :: Int -> Int -> Int
add x y =
let result = x + y -- falsy indentation would not report
in result -- falsy indentation would not reportIf you don't pass the ignore-defaults flag to the binary these files are excluded automatically:
"^\\.yarn/",
"^yarn\\.lock$",
"^package-lock\\.json$",
"^composer\\.lock$",
"^Cargo\\.lock$",
"^\\.pnp\\.cjs$",
"^\\.pnp\\.js$",
"^\\.pnp\\.loader\\.mjs$",
"\\.snap$",
"\\.otf$",
"\\.woff$",
"\\.woff2$",
"\\.eot$",
"\\.ttf$",
"\\.gif$",
"\\.png$",
"\\.jpg$",
"\\.jpeg$",
"\\.webp$",
"\\.avif",
"\\.pnm",
"\\.pbm",
"\\.pgm",
"\\.ppm",
"\\.mp4$",
"\\.wmv$",
"\\.svg$",
"\\.ico$",
"\\.bak$",
"\\.bin$",
"\\.pdf$",
"\\.zip$",
"\\.gz$",
"\\.tar$",
"\\.7z$",
"\\.bz2$",
"\\.log$",
"\\.patch$",
"\\.css\\.map$",
"\\.js\\.map$",
"min\\.css$",
"min\\.js$"
In your .ecrc file you can exclude files with the "exclude" key which takes an array of regular expressions.
This will get merged with the default excludes (if not ignored). You should remember to escape your regular expressions correctly. ;)
An .ecrc which would ignore all test files and all markdown files can look like this:
{
"Verbose": false,
"IgnoreDefaults": false,
"Exclude": ["testfiles", "\\.md$"],
"SpacesAfterTabs": false,
"Disable": {
"EndOfLine": false,
"Indentation": false,
"IndentSize": false,
"InsertFinalNewline": false,
"TrimTrailingWhitespace": false,
"MaxLineLength": false
}
}If you want to play around how the tool would behave you can also pass the --exclude argument to the binary. This will accept a regular expression as well. If you use this argument the default excludes as well as the excludes from the .ecrc file will merged together.
For example: ec --exclude node_modules
Every exclude option is merged together.
If you want to see which files the tool would check without checking them you can pass the --dry-run flag.
Note that while --dry-run outputs absolute paths, a regular expression matches on relative paths from where the ec command is used.
You are able to run this tool inside a Docker container.
To do this you need to have Docker installed and run this command in your repository root which you want to check:
docker run --rm --volume=$PWD:/check mstruebing/editorconfig-checker
Dockerhub: mstruebing/editorconfig-checker
Instead of installing and configuring editorconfig-checker and all other linters in your project CI workflows (GitHub Actions & others), you can use Mega-Linter which does all that for you with a single assisted installation.
Mega-Linter embeds editorconfig-checker by default in all its flavors, meaning that it will be run at each commit or Pull Request to detect any issue related to .editorconfig.
If you want to use only editorconfig-checker and not the 70+ other linters, you can use the following .mega-linter.yml configuration file:
ENABLE:
- EDITORCONFIGThe ss-open/ci/recipes project offers a ready to use lint job integrating editorconfig-checker.
- Main documentation: https://gitlab.com/ss-open/ci/recipes/-/blob/main/README.md
- Editorconfig job specific documentation: https://gitlab.com/ss-open/ci/recipes/-/blob/main/stages/lint/editorconfig/README.md
If you have any questions, suggestions, need a wrapper for a programming language or just want to chat join #editorconfig-checker on freenode(IRC). If you don't have an IRC-client set up you can use the freenode webchat.
