Skip to main content

A fast EditorConfig linter written in Rust

Project description

edcfg-lint

A fast editorconfig linter written in Rust. It is many times faster than editorconfig-checker.

Still a work in progress, in particular the harness is mostly vibe-coded and needs a serious refresh. However, it already approaches the limits of what the hardware and OS can do despite this.

How it works inside

There honestly isn't a lot of magic: we use standard Rust crates.

  • ignore is used for walking and parallelism.
  • ec4rs is used as our EditorConfig core.
  • memchr is used for some fast (substring and character) searches.
  • encoding_rs is used to handle charset detection and decoding.

edcfg-lint primarily comprises of:

  • The harness (src/main.rs)
  • The checker (src/file.rs)
  • A caching version of ec4rs::properties_of (src/ec.rs)

These crates are highly optimized (we're using a bunch of stuff that makes ripgrep so fast).

Performance

Benchmarked on an 16-inch MacBook Pro with M1 Max chip with 64 GB of memory and 4 TB SSD. Linting was done over home-assistant/core commit fc281b2faecdc86c0a716dfb4a1f243dde632297.

`.editorconfig` used
root = true

[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.py]
indent_style = space
indent_size = 4

[*.{js,json,yml,yaml}]
indent_style = space
indent_size = 2

[*.md]
trim_trailing_whitespace = false

editorconfig-checker 3.6.0 (without -disable-indent-size, as edcfg-lint doesn't do this check at all):

  Time (mean ± σ):      3.668 s ±  0.021 s    [User: 18.099 s, System: 2.113 s]
  Range (min … max):    3.655 s …  3.692 s    3 runs

edcfg-lint:

  Time (mean ± σ):     432.1 ms ± 133.7 ms    [User: 1394.8 ms, System: 2495.2 ms]
  Range (min … max):   322.0 ms … 586.6 ms    5 runs

edcfg-lint is ~8x faster.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

edcfg_lint-0.1.1.tar.gz (24.1 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

edcfg_lint-0.1.1-py3-none-win_amd64.whl (1.3 MB view details)

Uploaded Python 3Windows x86-64

edcfg_lint-0.1.1-py3-none-win32.whl (1.2 MB view details)

Uploaded Python 3Windows x86

edcfg_lint-0.1.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

edcfg_lint-0.1.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl (1.5 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ i686

edcfg_lint-0.1.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.3 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

edcfg_lint-0.1.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

edcfg_lint-0.1.1-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.5 MB view details)

Uploaded Python 3manylinux: glibc 2.5+ x86-64

edcfg_lint-0.1.1-py3-none-macosx_11_0_arm64.whl (1.3 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

edcfg_lint-0.1.1-py3-none-macosx_10_12_x86_64.whl (1.3 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file edcfg_lint-0.1.1.tar.gz.

File metadata

  • Download URL: edcfg_lint-0.1.1.tar.gz
  • Upload date:
  • Size: 24.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for edcfg_lint-0.1.1.tar.gz
Algorithm Hash digest
SHA256 b4b30f9da3c86de8ac68f7a303c1ad5d2a24a6b094e606e3d1d4de9d76befd39
MD5 d2fd52104c4eccd0c56809a71afad30d
BLAKE2b-256 ce321a133c5225ca6fea41dbb0e6b8246ccb21402c4b1fbe8ce9ebb27473a2d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for edcfg_lint-0.1.1.tar.gz:

Publisher: release.yml on astei/edcfg-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file edcfg_lint-0.1.1-py3-none-win_amd64.whl.

File metadata

  • Download URL: edcfg_lint-0.1.1-py3-none-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for edcfg_lint-0.1.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 038cc63ed9520bc84d8ae30f22923e6585cb8bf0588b9db04b0d864a923b9669
MD5 b04e3eb9ae30d33f63a8404c7ac89bc8
BLAKE2b-256 dd1c279f5ac67a6802b32b98cbea35455e9300ee542ecd63437b71a255d94e90

See more details on using hashes here.

Provenance

The following attestation bundles were made for edcfg_lint-0.1.1-py3-none-win_amd64.whl:

Publisher: release.yml on astei/edcfg-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file edcfg_lint-0.1.1-py3-none-win32.whl.

File metadata

  • Download URL: edcfg_lint-0.1.1-py3-none-win32.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: Python 3, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for edcfg_lint-0.1.1-py3-none-win32.whl
Algorithm Hash digest
SHA256 af6a6c85997094e6aadf512c52677d7c38ec414638b0d73c385b0de2ece6b8b7
MD5 b8e60df80807339f482b580f1b380bc5
BLAKE2b-256 f7db82ab79111317815bcdbfadf9ff3e4022a4d85976339a5a40ee568ee452ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for edcfg_lint-0.1.1-py3-none-win32.whl:

Publisher: release.yml on astei/edcfg-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file edcfg_lint-0.1.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for edcfg_lint-0.1.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9fa6032fc8bab0012adbb8be3ee0e51fb97cb57d57d0d7756ee833b0f9b374b0
MD5 55405b445f1b0d51d08e5e5ae1bbf5d4
BLAKE2b-256 b267baf94f407ca853217049e1d44cc16a1cd83e3dc8c901517e495c328da58f

See more details on using hashes here.

Provenance

The following attestation bundles were made for edcfg_lint-0.1.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on astei/edcfg-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file edcfg_lint-0.1.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for edcfg_lint-0.1.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 0c85a3af0aed3b0f7ad2d8a1037bbf8a40e7f2de9eefa06d0211363296b0cba4
MD5 968cfd130235008b73c6e3af8b0f4255
BLAKE2b-256 6756f9dafb32ba2dbd7b0c76230941c5f790744d5e15601057545f5981851a82

See more details on using hashes here.

Provenance

The following attestation bundles were made for edcfg_lint-0.1.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl:

Publisher: release.yml on astei/edcfg-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file edcfg_lint-0.1.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for edcfg_lint-0.1.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 1d6206f4da4deefb31abf9dc24da5aa753681d51e4492d6287db5af4aa5293ae
MD5 0254200e58e0e6cf80c1565668837e17
BLAKE2b-256 d6bb0903eb48686c4ee162e0989ed21a151b0acbd293915968c51cf6c1adac0a

See more details on using hashes here.

Provenance

The following attestation bundles were made for edcfg_lint-0.1.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl:

Publisher: release.yml on astei/edcfg-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file edcfg_lint-0.1.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for edcfg_lint-0.1.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 09aa0e25a0db4b2a5bc90668a0f9479182c68b4d29e273fda4e93a10e3ee0564
MD5 dd981d8986b0233ee10bc3f7acb88c2a
BLAKE2b-256 8e6d1e9ebb03abe5515463268c119684f71a93e78933baf8dbd0cc64d0474453

See more details on using hashes here.

Provenance

The following attestation bundles were made for edcfg_lint-0.1.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on astei/edcfg-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file edcfg_lint-0.1.1-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for edcfg_lint-0.1.1-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 f978b0bb00731a00e7eec87ef07d7e97d0e913dd203eedaceb77f1d902ab2e60
MD5 70a6b35467d66652d2dbfc8c6fd66a87
BLAKE2b-256 c166e1df3fe1b1ad78553a8f0cb50a7b484b1c5f60518bbfd1a0e490ad6e1574

See more details on using hashes here.

Provenance

The following attestation bundles were made for edcfg_lint-0.1.1-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl:

Publisher: release.yml on astei/edcfg-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file edcfg_lint-0.1.1-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for edcfg_lint-0.1.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 187aa06aa33bbe7857e9ec2d6823c6beda62950e26dd9b1e302b283823ad4c24
MD5 65672e8359e137733d10eab5f45a1add
BLAKE2b-256 0f55cb5efe7cafa03a6a6d6f7a71c91c8d1482a8281a98b0544fe707746951f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for edcfg_lint-0.1.1-py3-none-macosx_11_0_arm64.whl:

Publisher: release.yml on astei/edcfg-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file edcfg_lint-0.1.1-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for edcfg_lint-0.1.1-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e78eaec116a090eac75f0b4cd5cf5ac1792cd278e8d85a4239d32023b386fefc
MD5 1d35d48571e1d83942a93134ee3f8715
BLAKE2b-256 8ce366d992e8b7c48b250eec64c87fd331a7d801d32942d76771f371553212c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for edcfg_lint-0.1.1-py3-none-macosx_10_12_x86_64.whl:

Publisher: release.yml on astei/edcfg-lint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page