Changelog
Recent changes to marmot that you can see from the command line, grouped by day and by the part of marmot they touch. Changes to the compiler’s internals are not listed. RSS feed.
check
- human output wraps notes and finding lines at word boundaries to the terminal width 592726e7
- -staged checks what git has staged, for a pre-commit hook b672a754
- -watch runs again after every change and reports only new and resolved findings 9ac9f702
- an unchanged tree answers in 0.06 s; a one line edit in a 35 file package in 0.4 s d7bce69a
- marmot fix leaves files someone else is editing alone bed9060b
- marmot fix runs gofmt over the files it fixes when they were formatted before cb785d85
- fmt formats the files go fmt would: those of the patterns' directories, without testdata, _ and . directories 87c766a9
- exhaustive is opt in: -only exhaustive, or enabled in .golangci.yml ea68462a
- a soft heap limit of 1.5 GiB unless GOMEMLIMIT is set 3949e6a5
- dead code from per-package summaries 7ac97453
- vuln scans imports first and loads the program only when it imports a vulnerable package 7ed07ae5
- the dead code reuse test edits only a comment e924de2e
- test for the dead code reuse f61c8db6
- dead code reused while no package's references change; facts hashed canonically 3bbd551e
- an importer's key covers its dependencies' export data and facts, not their inputs 3242f273
- vuln beside cross and deadcode, and reused across body edits while no vulnerable package is imported 9b50c22c
- gopls prints what gopls check prints 6f73fb2b
- test for -changed 2b4f094b
- use the user cache directory when the marmot build cache cannot be created da2f9642
- marmot-check fix applies analyzer fixes in rounds and keeps only those that verify f76749cf
- exhaustive and nil checks (report only) on the shared analysis pass 18e090f8
- vuln runs govulncheck in process for every module and reports the vulnerabilities the code calls 1ed62313
- deadcode, rapid type analysis from every main and test of the workspace 95387a5f
- cross type checks every target of the platforms file through the cached engine cd07d790
- fmt without the go command for files whose imports are complete, job slots weighted by package size fb7df391
- gofmt the unused copy 140f48c5
- cached go list graph, fmt keyed by file stat, unused with one object path encoder per package 78ffed88
cgo
- _Bool parameters convert to bool before widening (cgo's named bool type) 77ca2be1
- builds that generate the same cgo output at once (one program at several -O levels) share it instead of failing the rename or removing a directory in use 75ec36ab
- fast path wrappers read the M once (rt_cgo_fast_enter returns it for rt_cgo_fast_exit) d108a61c
- cross builds (clang --target and MARMOT_SYSROOT for cgo's probes and the C compiles; #cgo LDFLAGS in the bundle's link.sh) a35060ed
- C functions that call nothing (after inlining, read from clang's IR of the wrappers) take the fast path d659b733
- the pointer check covers unsafe.Pointer arguments through the heap's pointer bits of the object (rt_heap_object_span, rt_heap_ptr_word) 2f4c64c5
- the pointer passing check (GODEBUG=cgocheck=1 by default): a typed pointer argument into the Go heap may point at no unpinned Go heap pointer; runtime.Pinner records its pins for it 4bd90723
- errcheck: report written files and the removal of an unused export file; say why temporary cleanups are ignored bdee0686
- marmot test of cgo packages (the test variant keeps its _test.go files; the external test package and the test main are left alone; go list's imports are kept) 2ff5d100
- //export, the generator side 85a0cc6f
- import "C" packages build, with C calls as direct native calls b03a4309
diag
- errcheck: say why the wrapped line's write error is ignored 0a793047
- wrapping keeps unquoted type names whole (struct { ... }, func(...) with its result type) 770de924
- human output wraps messages, labels, notes and help at word boundaries to the terminal width (at most 100), continuations aligned under their text; backticked spans stay whole; source lines unwrapped; goldens at widths 60, 80, 120 b5ed280e
- type mismatches point at the declarations the operand types come from 1ddfedc0
- check and analyzer fields, codes M0100 to M0108 for marmot check findings, warning summaries 8a411d24
- suggestions across files and packages; tests/diag/hard aa0ed217
- rustc style anatomy, applicability, rendered text, interface and constraint explanations 73c0808f
- one diagnostic model with human and JSON output, marmot fix and marmot explain b130621d
incremental
- the API hash is a text of the package's own declarations, not its export data ca8412dc
- main packages keep every name in their export data; the entry module fails without main dc008ec7
- API module keys off by default again (an edit adding an instantiation of a dependency's generic function linked a broken program); tests/incremental: new instantiation and runtime edit cases 1d80f39b
- runtime loads from export data; the generic pre-pass sees the cache 4af3a2d2
- API module keys on by default (MARMOT_API_KEYS=0 turns them off) c30470f1
- API module keys behind MARMOT_API_KEYS=1 until the conformance matrix and fuzz pass with them (rule 11); the default stays the dependencies' source c1cc883d
- a module depends on its dependencies' API, not their source ed60919e
nilcheck
- bound the guard search (boolean guards recursed through loop phis without end on real code) c2b4a3ec
- a boolean guard cleared in a loop still guards (cyclic phis hold if their other edges do) 287400ab
- a nil check reaches the use through a boolean (ok := p != nil && ...; if ok), negations, && and || chains 60edae6d
- analyzer for dereferences and map writes of values that can be nil 5fa9a8dc
bind
- count parameters named ...Count make an array a slice 5d25cf2e
- C structs as Go structs of the same layout (passed and returned by value, size checked at compile time), struct literal macros as Go vars, arrays with a count as slices, [rename], same-line comments as docs, free functions called with their own parameter type 944acc91
- no double unsafe.Pointer conversion for void buffers 27d5b7b6
marmot test
marmot
exhaustive
lint
fmt
repl
- show fmt.Sprint results and a trailing expression after statements; end output without a newline before the prompt 930ddde8
allocs
- place sites without a position at their use, a box at its argument; reasons name builtins and follow stores into locals b0d4a417
marmot test
- build the go list -test main of a package and run it in the package dir, -test.* flags passed through 9712f409