magus v0.4.3 is out. See what's new
¶ View markdown source · ✎ Suggest an edit
1 min read

scripted-rewrite

A deny rule: it refuses a scripted substitute-and-write, which cannot tell your symbol from a dependency's, and names what to run instead.

What it catches

A scripted substitute-and-write, which cannot tell your symbol from a dependency's.

Why

A regex cannot tell YOUR symbol from a dependency's symbol of the same name. A \.Sum\b rewrite aimed at one proto field also hits the OTel SDK's metricdata.Sum and a histogram's dp.Sum, and the damage is written before any diff is read. The graph knows which is which and a pattern never can: magus refs <symbol> --occurrences returns verified sites, per file, with columns. Run magus graph build first if refs reports a project not-indexed, because that verdict means unknown rather than absent, and taking it for "no matches" is how a rename misses half its sites. Rewriting raw TEXT (prose, a config value, a string literal) has no graph equivalent; say so and use an editor tool. A script file is judged by its program: python3 p.py, and a write of p.py, get the verdict the same program would get inline. A program whose every named path lies outside the workspace is untouched.

Seeing it

A verdict names its rule in brackets, which is how you got here:

deny [scripted-rewrite]: ...

magus describe rule scripted-rewrite prints the same entry at a terminal, and magus describe rules lists every rule this workspace enforces.

See also

  • All rules - what this workspace enforces, deny first
  • The guard - how a verdict is reached and wired
guardrulesscripted-rewritedeny
Last updated (a9ff8609)
Earlier changes on this page (1)

Full history ↗ · Blame source ↗

Glossary

Workspace

The magus root directory that owns a set of projects and shared config; the unit magus operates over. See workspace.

Project

A directory magus recognizes as a unit of work (it has a magusfile); the unit of caching, scheduling, and dependency tracking. See workspace.

Run

One target executing under one magus invocation, such as magus run test web or magus affected ci. A run keeps its captured output behind an output reference. Every magus run is a run whether or not any job asked for it; see Job for how the two relate.

Conventions

Placeholders

Angle brackets mark a value you replace with your own - never type the brackets:

magus run <target>
magus completion <shell>    # e.g. bash, zsh, fish

<target>, <path>, <shell>, <name> and the like are stand-ins, not literal text.