scc reads .gitmodules and excludes each listed path unless --no-gitmodule is passed. brief's own extension walk has no such skip. On a working tree with fetched submodules the two disagree:
$ git clone --depth 1 https://github.com/alexcrichton/openssl-src-rs && cd openssl-src-rs
$ git submodule update --init --depth 1
$ brief --json . | jq '[.languages[].name], .lines.by_language.C'
["C","Perl","Python","Rust","Emacs Lisp","Prolog","Ruby"]
null
$ scc --no-gitmodule --format json . | jq '.[]|select(.Name=="C").Code'
598526
detect.Engine.sccArgs (detect/detect.go) builds ["--format","json","--exclude-dir",...,path]. Appending "--no-gitmodule" there would make lines.by_language agree with languages[] whenever the caller has fetched submodules; on an unfetched tree the flag is a no-op since there is nothing under the submodule path to count.
scc reads
.gitmodulesand excludes each listed path unless--no-gitmoduleis passed. brief's own extension walk has no such skip. On a working tree with fetched submodules the two disagree:detect.Engine.sccArgs(detect/detect.go) builds["--format","json","--exclude-dir",...,path]. Appending"--no-gitmodule"there would makelines.by_languageagree withlanguages[]whenever the caller has fetched submodules; on an unfetched tree the flag is a no-op since there is nothing under the submodule path to count.