mirror of
https://github.com/XAMPPRocky/tokei
synced 2024-10-04 06:49:07 +00:00
587 lines
15 KiB
Markdown
587 lines
15 KiB
Markdown
# Tokei ([時計](https://en.wiktionary.org/wiki/%E6%99%82%E8%A8%88))
|
|
[![Mean Bean CI](https://github.com/XAMPPRocky/tokei/workflows/Mean%20Bean%20CI/badge.svg)](https://github.com/XAMPPRocky/tokei/actions?query=workflow%3A%22Mean+Bean+CI%22)
|
|
[![Help Wanted](https://img.shields.io/github/issues/XAMPPRocky/tokei/help%20wanted?color=green)](https://github.com/XAMPPRocky/tokei/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22)
|
|
[![Lines Of Code](https://tokei.rs/b1/github/XAMPPRocky/tokei?category=code)](https://github.com/XAMPPRocky/tokei)
|
|
[![Documentation](https://docs.rs/tokei/badge.svg)](https://docs.rs/tokei/)
|
|
![](https://img.shields.io/crates/d/tokei?label=downloads%20%28crates.io%29)
|
|
![](https://img.shields.io/github/downloads/xampprocky/tokei/total?label=downloads%20%28GH%29)
|
|
![](https://img.shields.io/homebrew/installs/dy/tokei?color=brightgreen&label=downloads%20%28brew%29)
|
|
|
|
Tokei is a program that displays statistics about your code. Tokei will show the number of files, total lines within those files and code, comments, and blanks grouped by language.
|
|
|
|
### Translations
|
|
- [中文](https://github.com/chinanf-boy/tokei-zh#支持的语言)
|
|
|
|
## Example
|
|
```console
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
Language Files Lines Code Comments Blanks
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
BASH 4 49 30 10 9
|
|
JSON 1 1332 1332 0 0
|
|
Shell 1 49 38 1 10
|
|
TOML 2 77 64 4 9
|
|
───────────────────────────────────────────────────────────────────────────────
|
|
Markdown 5 1355 0 1074 281
|
|
|- JSON 1 41 41 0 0
|
|
|- Rust 2 53 42 6 5
|
|
|- Shell 1 22 18 0 4
|
|
(Total) 1471 101 1080 290
|
|
───────────────────────────────────────────────────────────────────────────────
|
|
Rust 19 3416 2840 116 460
|
|
|- Markdown 12 351 5 295 51
|
|
(Total) 3767 2845 411 511
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
Total 32 6745 4410 1506 829
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
```
|
|
|
|
## [API Documentation](https://docs.rs/tokei)
|
|
|
|
## Table of Contents
|
|
|
|
- [Features](#features)
|
|
- [Installation](#installation)
|
|
- [Package Managers](#package-managers)
|
|
- [Manual](#manual)
|
|
- [Configuration](#configuration)
|
|
- [How to use Tokei](#how-to-use-tokei)
|
|
- [Options](#options)
|
|
- [Badges](#badges)
|
|
- [Supported Languages](#supported-languages)
|
|
- [Changelog](CHANGELOG.md)
|
|
- [Common Issues](#common-issues)
|
|
- [Canonical Source](#canonical-source)
|
|
- [Copyright and License](#copyright-and-license)
|
|
|
|
## Features
|
|
|
|
- Tokei is **very fast**, and is able to count millions of lines of code in seconds.
|
|
Check out the [11.0.0 release](https://github.com/XAMPPRocky/tokei/releases/v11.0.0)
|
|
to see how Tokei's speed compares to others.
|
|
|
|
- Tokei is **accurate**, Tokei correctly handles multi line comments,
|
|
nested comments, and not counting comments that are in strings. Providing an
|
|
accurate code statistics.
|
|
|
|
- Tokei has huge range of languages, supporting over **150** languages, and
|
|
their various extensions.
|
|
|
|
- Tokei can output in multiple formats(**CBOR**, **JSON**, **YAML**)
|
|
allowing Tokei's output to be easily stored, and reused. These can also be
|
|
reused in tokei combining a previous run's statistics with another set.
|
|
|
|
- Tokei is available on **Mac**, **Linux**, and **Windows**. See [installation
|
|
instructions](#installation) for how to get Tokei on your platform.
|
|
|
|
- Tokei is also a **library** allowing you to easily integrate it with other
|
|
projects.
|
|
|
|
- Tokei comes with and without color. Set the env variable NO_COLOR to 1, and
|
|
it'll be black and white.
|
|
|
|
## Installation
|
|
|
|
### Package Managers
|
|
|
|
#### Unix
|
|
```console
|
|
# Alpine Linux (since 3.13)
|
|
apk add tokei
|
|
# Arch Linux
|
|
pacman -S tokei
|
|
# Cargo
|
|
cargo install tokei
|
|
# Conda
|
|
conda install -c conda-forge tokei
|
|
# Fedora
|
|
sudo dnf install tokei
|
|
# FreeBSD
|
|
pkg install tokei
|
|
# NetBSD
|
|
pkgin install tokei
|
|
# Nix/NixOS
|
|
nix-env -i tokei
|
|
# OpenSUSE
|
|
sudo zypper install tokei
|
|
# Void Linux
|
|
sudo xbps-install tokei
|
|
```
|
|
|
|
#### macOS
|
|
```console
|
|
# Homebrew
|
|
brew install tokei
|
|
# MacPorts
|
|
sudo port selfupdate
|
|
sudo port install tokei
|
|
```
|
|
|
|
#### Windows
|
|
```console
|
|
# Winget
|
|
winget install XAMPPRocky.tokei
|
|
# Scoop
|
|
scoop install tokei
|
|
```
|
|
|
|
### Manual
|
|
|
|
#### Downloading
|
|
You can download prebuilt binaries in the
|
|
[releases section](https://github.com/XAMPPRocky/tokei/releases).
|
|
|
|
#### Building
|
|
You can also build and install from source (requires the latest stable [Rust] compiler.)
|
|
```console
|
|
cargo install --git https://github.com/XAMPPRocky/tokei.git tokei
|
|
```
|
|
|
|
[rust]: https://www.rust-lang.org
|
|
|
|
|
|
## Configuration
|
|
|
|
Tokei has a [configuration] file that allows you to change default behaviour.
|
|
The file can be named `tokei.toml` or `.tokeirc`. Currently tokei looks for
|
|
this file in three different places. The current directory, your home directory,
|
|
and your configuration directory.
|
|
|
|
## How to use Tokei
|
|
|
|
#### Basic usage
|
|
|
|
This is the basic way to use tokei. Which will report on the code in `./foo`
|
|
and all subfolders.
|
|
|
|
```shell
|
|
$ tokei ./foo
|
|
```
|
|
|
|
[configuration]: ./tokei.example.toml
|
|
|
|
#### Multiple folders
|
|
To have tokei report on multiple folders in the same call simply add a comma,
|
|
or a space followed by another path.
|
|
|
|
```shell
|
|
$ tokei ./foo ./bar ./baz
|
|
```
|
|
```shell
|
|
$ tokei ./foo, ./bar, ./baz
|
|
```
|
|
|
|
#### Excluding folders
|
|
Tokei will respect all `.gitignore` and `.ignore` files, and you can use
|
|
the `--exclude` option to exclude any additional files. The `--exclude` flag has
|
|
the same semantics as `.gitignore`.
|
|
|
|
```shell
|
|
$ tokei ./foo --exclude *.rs
|
|
```
|
|
|
|
Paths to exclude can also be listed in a `.tokeignore` file, using the same
|
|
[syntax](https://git-scm.com/docs/gitignore) as .gitignore files.
|
|
|
|
#### Sorting output
|
|
By default tokei sorts alphabetically by language name, however using `--sort`
|
|
tokei can also sort by any of the columns.
|
|
|
|
`blanks, code, comments, lines`
|
|
|
|
```shell
|
|
$ tokei ./foo --sort code
|
|
```
|
|
|
|
#### Outputting file statistics
|
|
By default tokei only outputs the total of the languages, and using `--files`
|
|
flag tokei can also output individual file statistics.
|
|
|
|
```shell
|
|
$ tokei ./foo --files
|
|
```
|
|
|
|
#### Outputting into different formats
|
|
Tokei normally outputs into a nice human readable format designed for terminals.
|
|
There is also using the `--output` option various other formats that are more
|
|
useful for bringing the data into another program.
|
|
|
|
**Note:** This version of tokei was compiled without any serialization formats, to enable serialization, reinstall
|
|
tokei with the features flag.
|
|
|
|
```shell
|
|
ALL:
|
|
cargo install tokei --features all
|
|
|
|
CBOR:
|
|
cargo install tokei --features cbor
|
|
|
|
YAML:
|
|
cargo install tokei --features yaml
|
|
```
|
|
|
|
**Currently supported formats**
|
|
- JSON `--output json`
|
|
- YAML `--output yaml`
|
|
- CBOR `--output cbor`
|
|
|
|
```shell
|
|
$ tokei ./foo --output json
|
|
```
|
|
|
|
#### Reading in stored formats
|
|
Tokei can also take in the outputted formats added in the previous results to its
|
|
current run. Tokei can take either a path to a file, the format passed in as a
|
|
value to the option, or from stdin.
|
|
|
|
```shell
|
|
$ tokei ./foo --input ./stats.json
|
|
```
|
|
|
|
## Options
|
|
|
|
```
|
|
USAGE:
|
|
tokei [FLAGS] [OPTIONS] [--] [input]...
|
|
|
|
FLAGS:
|
|
-f, --files Will print out statistics on individual files.
|
|
-h, --help Prints help information
|
|
--hidden Count hidden files.
|
|
-l, --languages Prints out supported languages and their extensions.
|
|
--no-ignore Don't respect ignore files (.gitignore, .ignore, etc.). This implies --no-ignore-parent,
|
|
--no-ignore-dot, and --no-ignore-vcs.
|
|
--no-ignore-dot Don't respect .ignore and .tokeignore files, including those in parent directories.
|
|
--no-ignore-parent Don't respect ignore files (.gitignore, .ignore, etc.) in parent directories.
|
|
--no-ignore-vcs Don't respect VCS ignore files (.gitignore, .hgignore, etc.), including those in parent
|
|
directories.
|
|
-V, --version Prints version information
|
|
-v, --verbose Set log output level:
|
|
1: to show unknown file extensions,
|
|
2: reserved for future debugging,
|
|
3: enable file level trace. Not recommended on multiple files
|
|
|
|
OPTIONS:
|
|
-c, --columns <columns> Sets a strict column width of the output, only available for terminal output.
|
|
-e, --exclude <exclude>... Ignore all files & directories matching the pattern.
|
|
-i, --input <file_input> Gives statistics from a previous tokei run. Can be given a file path, or "stdin" to
|
|
read from stdin.
|
|
-o, --output <output> Outputs Tokei in a specific format. Compile with additional features for more format
|
|
support. [possible values: cbor, json, yaml]
|
|
-s, --sort <sort> Sort languages based on column [possible values: files, lines, blanks, code, comments]
|
|
-t, --type <types> Filters output by language type, separated by a comma. i.e. -t=Rust,Markdown
|
|
|
|
ARGS:
|
|
<input>... The path(s) to the file or directory to be counted.
|
|
```
|
|
|
|
## Badges
|
|
Tokei has support for badges. For example
|
|
[![](https://tokei.rs/b1/github/XAMPPRocky/tokei)](https://github.com/XAMPPRocky/tokei).
|
|
|
|
```
|
|
[![](https://tokei.rs/b1/github/XAMPPRocky/tokei)](https://github.com/XAMPPRocky/tokei).
|
|
```
|
|
|
|
Tokei's URL scheme is as follows.
|
|
|
|
```
|
|
https://tokei.rs/b1/{host: values: github|gitlab}/{Repo Owner eg: XAMPPRocky}/{Repo name eg: tokei}
|
|
```
|
|
|
|
By default the badge will show the repo's LoC(_Lines of Code_), you can also
|
|
specify for it to show a different category, by using the `?category=` query
|
|
string. It can be either `code`, `blanks`, `files`, `lines`, `comments`,
|
|
Example show total lines:
|
|
|
|
```
|
|
[![](https://tokei.rs/b1/github/XAMPPRocky/tokei?category=lines)](https://github.com/XAMPPRocky/tokei).
|
|
```
|
|
|
|
The server code hosted on tokei.rs is in [XAMPPRocky/tokei_rs](https://github.com/XAMPPRocky/tokei_rs)
|
|
|
|
## Dockerized version
|
|
Tokei is available in a small `alpine`-based docker image, buildable through [earthly](https://github.com/earthly/earthly):
|
|
```bash
|
|
earthly +docker
|
|
```
|
|
|
|
Once built, one can run the image with:
|
|
```bash
|
|
docker run --rm -v /path/to/analyze:/src tokei .
|
|
```
|
|
|
|
Or, to simply analyze the current folder (linux):
|
|
```bash
|
|
docker run --rm -v $(pwd):/src tokei .
|
|
```
|
|
|
|
## Supported Languages
|
|
|
|
If there is a language that you would to add to tokei feel free to make a pull
|
|
request. Languages are defined in [`languages.json`](./languages.json), and you can
|
|
read how to add and test your language in our [CONTRIBUTING.md](./CONTRIBUTING.md).
|
|
|
|
```
|
|
Abap
|
|
ActionScript
|
|
Ada
|
|
Agda
|
|
Alex
|
|
Alloy
|
|
Asn1
|
|
Asp
|
|
AspNet
|
|
Assembly
|
|
AssemblyGAS
|
|
ATS
|
|
Autoconf
|
|
AutoHotKey
|
|
Automake
|
|
AWK
|
|
Bash
|
|
Batch
|
|
Bazel
|
|
Bean
|
|
Bitbake
|
|
BrightScript
|
|
C
|
|
Cabal
|
|
Cassius
|
|
Ceylon
|
|
CHeader
|
|
Clojure
|
|
ClojureC
|
|
ClojureScript
|
|
CMake
|
|
Cobol
|
|
CoffeeScript
|
|
Cogent
|
|
ColdFusion
|
|
ColdFusionScript
|
|
Coq
|
|
Cpp
|
|
CppHeader
|
|
Crystal
|
|
CSharp
|
|
CShell
|
|
Css
|
|
Cuda
|
|
Cython
|
|
D
|
|
DAML
|
|
Dart
|
|
DeviceTree
|
|
Dhall
|
|
Dockerfile
|
|
DotNetResource
|
|
DreamMaker
|
|
Dust
|
|
Ebuild
|
|
EdgeDB
|
|
Edn
|
|
Elisp
|
|
Elixir
|
|
Elm
|
|
Elvish
|
|
EmacsDevEnv
|
|
Emojicode
|
|
Erlang
|
|
Factor
|
|
FEN
|
|
Fish
|
|
FlatBuffers
|
|
ForgeConfig
|
|
Forth
|
|
FortranLegacy
|
|
FortranModern
|
|
FreeMarker
|
|
FSharp
|
|
Fstar
|
|
GDB
|
|
GdScript
|
|
Gherkin
|
|
Gleam
|
|
Glsl
|
|
Go
|
|
Graphql
|
|
Groovy
|
|
Gwion
|
|
Hamlet
|
|
Handlebars
|
|
Happy
|
|
Hare
|
|
Haskell
|
|
Haxe
|
|
Hcl
|
|
Hex
|
|
Hlsl
|
|
HolyC
|
|
Html
|
|
Hy
|
|
Idris
|
|
Ini
|
|
IntelHex
|
|
Isabelle
|
|
Jai
|
|
Java
|
|
JavaScript
|
|
Jq
|
|
Json
|
|
Jsx
|
|
Julia
|
|
Julius
|
|
KakouneScript
|
|
Kotlin
|
|
Lean
|
|
Less
|
|
Lingua Franca
|
|
LinkerScript
|
|
Liquid
|
|
Lisp
|
|
LLVM
|
|
Logtalk
|
|
Lua
|
|
Lucius
|
|
Madlang
|
|
Max
|
|
Makefile
|
|
Markdown
|
|
Meson
|
|
Mint
|
|
Mlatu
|
|
ModuleDef
|
|
MoonScript
|
|
MsBuild
|
|
Mustache
|
|
Nim
|
|
Nix
|
|
NotQuitePerl
|
|
NuGetConfig
|
|
Nushell
|
|
ObjectiveC
|
|
ObjectiveCpp
|
|
OCaml
|
|
Odin
|
|
Org
|
|
Oz
|
|
Pascal
|
|
Perl
|
|
Perl6
|
|
Pest
|
|
Php
|
|
Poke
|
|
Polly
|
|
Pony
|
|
PostCss
|
|
PowerShell
|
|
Processing
|
|
Prolog
|
|
Protobuf
|
|
PSL
|
|
PureScript
|
|
Python
|
|
Qcl
|
|
Qml
|
|
R
|
|
Racket
|
|
Rakefile
|
|
Razor
|
|
Renpy
|
|
ReStructuredText
|
|
RON
|
|
RPMSpecfile
|
|
Ruby
|
|
RubyHtml
|
|
Rust
|
|
Sass
|
|
Scala
|
|
Scheme
|
|
Scons
|
|
Sh
|
|
ShaderLab
|
|
Slang
|
|
Sml
|
|
Solidity
|
|
SpecmanE
|
|
Spice
|
|
Sql
|
|
SRecode
|
|
Stratego
|
|
Svelte
|
|
Svg
|
|
Swift
|
|
Swig
|
|
SystemVerilog
|
|
Tcl
|
|
Tex
|
|
Text
|
|
Thrift
|
|
Toml
|
|
Tsx
|
|
Twig
|
|
TypeScript
|
|
UMPL
|
|
UnrealDeveloperMarkdown
|
|
UnrealPlugin
|
|
UnrealProject
|
|
UnrealScript
|
|
UnrealShader
|
|
UnrealShaderHeader
|
|
UrWeb
|
|
UrWebProject
|
|
Vala
|
|
VB6
|
|
VBScript
|
|
Velocity
|
|
Verilog
|
|
VerilogArgsFile
|
|
Vhdl
|
|
VimScript
|
|
VisualBasic
|
|
VisualStudioProject
|
|
VisualStudioSolution
|
|
Vue
|
|
WebAssembly
|
|
Wolfram
|
|
Xaml
|
|
XcodeConfig
|
|
Xml
|
|
XSL
|
|
Xtend
|
|
Yaml
|
|
ZenCode
|
|
Zig
|
|
Zsh
|
|
```
|
|
|
|
## Common issues
|
|
|
|
### Tokei says I have a lot of D code, but I know there is no D code!
|
|
This is likely due to `gcc` generating `.d` files. Until the D people decide on
|
|
a different file extension, you can always exclude `.d` files using the
|
|
`-e --exclude` flag like so
|
|
|
|
```
|
|
$ tokei . -e *.d
|
|
```
|
|
|
|
## Canonical Source
|
|
The canonical source of this repo is hosted on
|
|
[GitHub](https://github.com/XAMPPRocky/tokei). If you have a GitHub account,
|
|
please make your issues, and pull requests there.
|
|
|
|
## Related Tools
|
|
|
|
- [tokei-pie](https://github.com/laixintao/tokei-pie): Render tokei's output to
|
|
interactive sunburst chart.
|
|
|
|
## Copyright and License
|
|
(C) Copyright 2015 by XAMPPRocky and contributors
|
|
|
|
See [the graph](https://github.com/XAMPPRocky/tokei/graphs/contributors) for a full list of contributors.
|
|
|
|
Tokei is distributed under the terms of both the MIT license and the Apache License (Version 2.0).
|
|
|
|
See [LICENCE-APACHE](./LICENCE-APACHE), [LICENCE-MIT](./LICENCE-MIT) for more information.
|