poly
is a command-line tool that determines project contents.
The goal is to able to point it to any directory and get an accurate,
complete, and informative summary of its contents.
It also has the secondary goal of advancing the state-of-the art for ATS, by writing practical, distributable software and supporting tooling.
Reasons to use polyglot:
- Accurate: won't confuse Coq and Verilog
- Fast: polyglot is faster than all other tools
- Pretty: magenta output
Reasons not to use polyglot:
- Written in ATS
- Best on Linux
- No regex-based exclusions
- Doesn't read
.gitignore
&c. - Doesn't count block comments
- Multiline string bug.
On the Rust repo:
Tool | Language | Time |
---|---|---|
polyglot |
ATS | 134.6 ms |
loc |
Rust | 139.6 ms |
scc |
Go | 225.4 ms |
tokei |
Rust | 262.6 ms |
gocloc |
Go | 923.9 ms |
cloc |
Perl | 5.610 s |
enry |
Go | 6.926 s |
linguist |
Ruby | 20.16 s |
For more extensive benchmarks, see my blog post with some additional data.
Polyglot distinguishes itself from tokei
, gocloc
, and loc
by being able to disambiguate file names.
Thus, poly
will not confuse Happy for Yacc (for instance).
The easiest way to install is to use the installation script, like so:
curl -sSl https://raw.githubusercontent.com/vmchale/polyglot/master/bash/install.sh | sh -s
You can optionally install compleat for shell completions as well.
There is a vim plugin available which can count lines of code in a project.
You can view manpages for poly
with
man poly
You can install ats-pkg with
curl -sSl https://raw.githubusercontent.com/vmchale/atspkg/master/bash/install.sh | sh -s
And then build poly
with
git clone git@github.com:vmchale/polyglot.git
cd polyglot
atspkg build --pkg-args './gc.dhall'
This will put a binary at target/poly
.
If you are on Mac, replace the last line with
atspkg build --pkg-args './mac.dhall'
To run the test suite
atspkg test --pkg-args './gc.dhall'
For languages already supported, see LANGUAGES.md
-------------------------------------------------------------------------------
Language Files Lines Code Comments Blanks
-------------------------------------------------------------------------------
ATS 17 3794 3626 41 127
C 1 24 22 0 2
C Header 1 43 35 0 8
Dash 5 144 110 8 26
Dhall 5 93 83 0 10
Markdown 6 938 813 0 125
TOML 1 3 3 0 0
YAML 1 58 52 0 6
-------------------------------------------------------------------------------
Total 37 5097 4744 49 304
-------------------------------------------------------------------------------