vmchale/polyglot
{ "createdAt": "2017-11-27T10:28:06Z", "defaultBranch": "master", "description": "Tool to count lines of source code.", "fullName": "vmchale/polyglot", "homepage": "", "language": "ATS", "name": "polyglot", "pushedAt": "2024-01-31T23:08:37Z", "stargazersCount": 252, "topics": [], "updatedAt": "2025-05-21T03:24:09Z", "url": "https://github.com/vmchale/polyglot"}polyglot
Section titled “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.
<img alt=“Screenshot of sample output” unsrc=https://github.com/vmchale/polyglot/raw/master/screenshot.png>
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.
Benchmarks
Section titled “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
Section titled “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
Section titled “Installation”From a Script
Section titled “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 -sYou can optionally install compleat for shell completions as well.
Vim Plugin
Section titled “Vim Plugin”There is a vim plugin available which can count lines of code in a project.
Documentation
Section titled “Documentation”You can view manpages for poly with
man polyBuilding for Hacking
Section titled “Building for Hacking”You can install ats-pkg with
curl -sSl https://raw.githubusercontent.com/vmchale/atspkg/master/bash/install.sh | sh -sAnd then build poly with
git clone git@github.com:vmchale/polyglot.gitcd polyglotatspkg 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
Section titled “Testing”To run the test suite
atspkg test --pkg-args './gc.dhall'Languages
Section titled “Languages”For languages already supported, see LANGUAGES.md
Contents
Section titled “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-------------------------------------------------------------------------------