= README for loccount =

loccount counts source lines of code (ignoring blank lines and
comments) for many, many languages.

loccount started out as a re-implementation of David A. Wheeler's
sloccount tool in Go, but has since grown a lot more capability.  It
is faster, handles more different languages, can report LLOC as well
as SLOC, and can do COCOMO II as well as COCOMO I estimates. Because
it's one source file in Go, it is easier to maintain and extend than
the multi-file, multi-language implementation of the original.

The -t option also makes it useful for identifying the origin of
alien source files; using a Go regular expression against language
names and aliases, you can usually get a brief description of any
language that appears in a loccount report. By default that report is
plain text; add -H to emit HTML instead.

You can view a webified version of the language database at
link:https://esr.gitlab.io/loccount/[here].

== Comparisons

Why use this counter rather than competitors like tokei, scc, or
gocloc?

1. loccount has very, very broad coverage of programming languages,
document markups. Here's a comparison:
+
[options="header"]
|=======================
| Languages | Counters
| 725       | Loccount
| 361       | Scc
| 354       | Cloc
| 329       | Tokei
| 187       | Gocloc
|=======================

2. loccount reports LLOC as well as SLOC when possible.

3. loccount can do COCOMO II cost estimation.

4. loccount can report in self-describing JSON for postprocessing.

5. loccount can usually tell you what an unidentified source file is.

6. loccount is very fast, exploiting as many processors as you have.

== Build instructions

To build it, have the Go compiler and Python 3 installed and do "make"
in the top-level directory. 

If you get a message about genericLanguages being undefined, you did "go build"
which is not enough.  The make production generates some Go from a JSON file; 
this is why you needed Python installed.

You can run a self-test with 'make check'.  The sample sources are in
the test/ subdirectory.

See hacking.adoc for information on how to add support for a language.
You may also want to read the design notes in design-notes.adoc

== Packages

This code is commonly packaged as "loccount".

image:https://repology.org/badge/vertical-allrepos/loccount.svg[Repology
package status]
