LCOM4go is a tool to compute LCOM4, Lack of Cohesion of Methods metrics ver.4, for golang projects.
This project has been archived as of August 2025.
We no longer maintain it.
LCOM4go was created to measure code readability using the LCOM4 (Lack of Cohesion of Methods) metric.
However, as AI-based code generation becomes the standard, traditional readability metrics have become less meaningful.
Instead, we are shifting our focus toward:
- AI-friendliness – Is the code easy for LLMs to understand and modify?
- Prompt-based regeneration – Can the code be reliably edited via prompts?
- Next-gen maintainability – Beyond cohesion, toward metrics like “promptability” or “regenerability”
In a world where code is generated, not written by hand,
maintainability must also evolve.
$ go install --ldflags "-s -w" --trimpath github.com/yahoojapan/lcom4go/cmd/lcom4@latest
$ $(go env GOPATH)/bin/lcom4 ./...
...
$ $(go env GOPATH)/bin/lcom4 net/http
...
$ go vet -vettool=$(go env GOPATH)/bin/lcom4 ./...
...
$ go vet -vettool=$(go env GOPATH)/bin/lcom4 net/http
...
https://objectscriptquality.com/docs/metrics/lack-cohesion-methods-lcom4
The lcom4 of s0
is 1 because both method1
and method2
use s0.m
.
type s0 struct {
m int
}
func (a s0) method1() int {
return a.m
}
func (a s0) method2() int {
return -a.m
}
The lcom4 of s1
is 2 because method3
uses a.n
which is not used by method1
and method2
.
type s1 struct {
m int
n int
}
func (a s1) method1() int {
return a.m
}
func (a s1) method2() int {
return -a.m
}
func (a s1) method3() int {
return -a.n
}
go test ./...
This software is released under the MIT License, see the license file.
- https://www.aivosto.com/project/help/pm-oo-cohesion.html#LCOM4
- https://kenchon.github.io/cohesive-code
- https://objectscriptquality.com/docs/metrics/lack-cohesion-methods-lcom4
- https://github.com/FujiHaruka/eslint-plugin-lcom
- https://metacpan.org/release/JOENIO/Analizo-1.20.3/source/lib/Analizo/Metric/LackOfCohesionOfMethods.pm
- https://github.com/potfur/lcom
- http://www.isys.uni-klu.ac.at/PDF/1995-0043-MHBM.pdf
- https://github.com/cleuton/jqana