polyglot
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.
Pitch
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.
Benchmarks
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.
Heuristics
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).
Installation
From a Script
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.
Vim Plugin
There is a vim plugin available which can count lines of code in a project.
Documentation
You can view manpages for poly
with
man poly
Building for Hacking
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 [email protected]: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'
Testing
To run the test suite
atspkg test --pkg-args './gc.dhall'
Languages
For languages already supported, see LANGUAGES.md
Contents
-------------------------------------------------------------------------------
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
-------------------------------------------------------------------------------