Skip to main content

A Python-native clone of LLVMs FileCheck tool

Project description

filecheck - A Python-native clone of LLVMs FileCheck tool

Note: This project is the successor of mull-project/FileCheck.py.

This tries to be as close a clone of LLVMs FileCheck as possible, without going crazy. It currently passes 1576 out of 1645 (95.8%) of LLVMs MLIR filecheck tests. We are tracking all 69 remaining test failures in GitHub issues.

There are some features that are left out for now (e.g.a pseudo-numeric variables and parts of numeric substitution ).

The codebase is fully type checked by pyright, and automatically formatted using black. We aim to have tests covering everything from normal matching down to error messages.

Install by running pip install filecheck.

Features:

Here's an overview of all FileCheck features and their implementation status.

  • Checks:
    • CHECK
    • CHECK-NEXT
    • CHECK-NOT (Bug: #10)
    • CHECK-LABEL (Bug: #8)
    • CHECK-EMPTY
    • CHECK-SAME
    • CHECK-DAG
    • CHECK-COUNT
  • Flags:
    • --check-prefix
    • --check-prefixes
    • --comment-prefixes
    • --allow-unused-prefixes
    • --input-file
    • --match-full-lines
    • --strict-whitespace (Bug: #6)
    • --ignore-case
    • --implicit-check-not (Tracked: #20)
    • --dump-input (only fail and never supported)
    • --dump-input-context
    • --dump-input-filter
    • --enable-var-scope
    • -D<VAR=VALUE>
    • -D#<FMT>,<NUMVAR>=<NUMERIC EXPRESSION>
    • -version
    • -v
    • -vv
    • --allow-deprecated-dag-overlap
    • --allow-empty
    • --color Colored output is supported and automatically detected. No support for the flag.
  • Base Features:
    • Regex patterns
    • Captures and Capture Matches (Bug: #11)
    • Numeric Captures
    • Numeric Substitutions (jesus christ, wtf man) (Tracked: #21)
    • Literal matching (CHECK{LITERAL})
    • Weird regex features ([:xdigits:] and friends)
    • Correct(?) handling of matching check lines (Bug: #22)
  • Testing:
    • Base cases
    • Negative tests
    • Error messages (started)
    • Lots of edge cases
    • MLIR/xDSL integration tests
  • UX:
    • Good error messages: Error messages are on an okay level, not great, but not terrible either.
      • Parse errors
      • Matching errors
      • Print possible intended matches (could be better still)
      • Malformed regexes
      • Wrong/unkown command line arguments
      • Print variables and their origin in error messages
  • Infrastructure:
    • Formatting: black
    • Pyright
    • pre-commit
    • CI for everything

We are open to PRs for bugfixes or any features listed here.

Differences to LLVMs FileCheck:

We want to be as close as possible to the original FileCheck, and document our differences very clearly.

If you encounter a difference that is not documented here, feel free to file a bug report.

Better Regexes:

We use pythons regex library, which is a flavour of a Perl compatible regular expression (PCRE), instead of FileChecks POSIX regex flavour.

Example:

// LLVM filecheck:
// CHECK: %{{[[:alnum:]]+}}, %{{[[:digit:]]+}}

// our fileheck:
// CHECK: %{{[a-zA-Z0-9]+}}, %{{\d+}}

Some effort is made to translate character classes from POSIX to PCRE, although it might be wrong in edge cases.

Relaxed Matching:

We relax some of the matching rules, like:

  • Allow a file to start with CHECK-NEXT

No Numerical Substitution:

This is used in 2 out of 1645 tests in our benchmark (upstream MLIR tests).

While our filecheck supports numeric capture ([[#%.3x,VAR:]] will capture a three-digit hex number), we don't support arithmetic expressions on these captured values at the moment. We also don't support the "Pseudo Numeric Variable" @LINE.

Special Feature Flags:

This version of filecheck implements some non-standard extensions to LLVMs filecheck. These are disabled by default but can be enabled through the environment variable FILECHECK_FEATURE_ENABLE=.... Avialable extensions are documented here:

  • MLIR_REGEX_CLS: Add additional special regex matchers to match MLIR/LLVM constructs:
    • \V will match any SSA value name

Reject Empty Captures:

We introduce a new flag called reject-empty-vars that throws an error when a capture expression captures an empty string.

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

filecheck-1.0.2.tar.gz (19.9 kB view details)

Uploaded Source

Built Distribution

filecheck-1.0.2-py3-none-any.whl (23.7 kB view details)

Uploaded Python 3

File details

Details for the file filecheck-1.0.2.tar.gz.

File metadata

  • Download URL: filecheck-1.0.2.tar.gz
  • Upload date:
  • Size: 19.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for filecheck-1.0.2.tar.gz
Algorithm Hash digest
SHA256 49d2a56e37a8ff9db62ecf33a37c5343fa2bf32e53321339687b0dceb3e09828
MD5 51ce6283854edbd69ff496ddcff65ae6
BLAKE2b-256 54c32c1c282331ccf4866043ac2a663ac38f0d8a867b76bb5ea8765104c9e971

See more details on using hashes here.

Provenance

The following attestation bundles were made for filecheck-1.0.2.tar.gz:

Publisher: pythonpublish.yml on AntonLydike/filecheck

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

File details

Details for the file filecheck-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: filecheck-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 23.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for filecheck-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 af950e48a82c3923d945d8688b69ff4879c7ec0e9739b17b41a3326a980419ff
MD5 d74183f28a8f8b32bc8f0f6c2705d825
BLAKE2b-256 da54b1370c4c4b9bbcae69c535b30c106d114e2b28cdf7e28842a315bbd9d19d

See more details on using hashes here.

Provenance

The following attestation bundles were made for filecheck-1.0.2-py3-none-any.whl:

Publisher: pythonpublish.yml on AntonLydike/filecheck

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 Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page