Tool · Code review

Jeff

A read-only Go CLI that applies a fixed catalog of semantic code checks with Jev, locally or in continuous integration.

By Alurith
THE INTERESTING PART

See how semantic checks become named lint rules with explicit exit codes for violations and uncertainty.

Source filesSemantic rulesCLI / CI report

What it does

Jeff checks files against twenty named semantic rules. The catalog covers concerns such as unclear responsibility, hidden side effects, weak error context, unnecessary complexity, duplicated domain knowledge, fragile control flow, boundary separation, and testability.

What you can reuse

The strongest reusable idea is the rule contract: a stable identifier, a narrow question, and a CI-compatible outcome. Jeff separates a conclusive violation from an inconclusive or provider error through distinct exit codes, which is valuable whenever probabilistic judgments enter an automated check.

How it fits

Source files and a fixed rule catalog become typed checks. The CLI can print a human-readable report or JSON for automation. Jev performs semantic judgment; the process controls input discovery, result formatting, and exit behavior.

Setup and compatibility

The documented interface is jeff check, with optional JSON output and cache control. Authentication uses a TypeSafe API key from the environment or the operating system keyring. A custom TypeSafe-compatible base URL can be configured for testing.

Limitations

The visible repository did not show a license at review time, so this entry links to the implementation without republishing its code. The README documents a built-in rule set; it does not establish a portable third-party rule format. Jev Directory has not run the CLI.

Sources

Primary source: Jeff repository.

TAKE AN IDEA INTO YOUR CODE

Related copyable example

All examples →

Each example states whether its question is extracted, adapted, or independently written. It is a starting point, not the whole project.

Flag hidden side effects

Identify functions whose names and contracts hide observable changes.

Source Alurith
THE QUESTION

Does this function change observable state in a way that is not apparent from its name or supplied contract?