首页 > 其他分享 >代码统计利器:Rust tokei 库全面介绍

代码统计利器:Rust tokei 库全面介绍

时间:2024-04-26 11:12:36浏览次数:32  
标签:src 代码 Rust 利器 let tokei 统计

引言

作为程序员,我们常常需要统计项目中的代码行数,以了解项目规模和进度。市面上有很多代码统计工具,但不少工具存在统计不准、语言支持不全、性能不佳等问题。今天给大家介绍一个 Rust 生态中的代码统计利器:tokei。tokei 通过语法分析准确统计代码行数,目前已支持 200+ 种语言,而且性能卓越,堪称业界良心之作。

创作背景

笔者最近在学习 Rust 语言,接触到了 tokei 这个库。该库的设计非常优雅,代码也很简洁,给笔者留下了深刻印象。因此希望通过此文,将 tokei 介绍给更多的 Rust 开发者和程序员,希望大家能从中获益。

主要特性

tokei 主要有以下特性:

  • 支持 200 多种语言,覆盖主流语言

  • 通过语法分析准确统计代码、注释、空行数

  • 支持排除指定目录,如 node_modules 等

  • 支持输出 JSON、YAML、CBOR 等结构化格式

  • 支持输出到终端,并且支持颜色高亮和排序

  • 拥有命令行工具和 Rust API 两种使用方式

  • 统计性能优异,可在数秒内分析百万行代码库

快速上手

tokei 可通过 Cargo 一键安装:

cargo install tokei

然后就可以在命令行使用了:

统计当前目录下 Rust 代码行数

tokei ./src

统计指定语言,输出 JSON

tokei ./src --type=Rust,Markdown --output json

排除指定的 Kan.md 文件

tokei ./src -e kan.md

除了命令行,tokei 也可以直接在 Rust 代码中使用。

首先需要导入相关的 crate 到 Cargo.toml 文件中:

[dependencies]  
tokei="13.0.0-alpha.0"

编写我们的代码:

use tokei::Config;  
use tokei::Languages;  
  
fn main() {  
    // 待统计的目录  
    let paths = &["./src"];  
    // 要排除的目录  
    let excludes = &["./target"];  
    // tokei 配置  
    let config = Config::default();  
  
    // 执行统计  
    let mut languages = Languages::new();  
    languages.get_statistics(paths, excludes, &config);  
  
    // 打印结果  
    for (name, language) in &languages {  
        println!("{}: {} lines", name, language.code);  
    }  
}

输出:

Rust: 1621 lines  
Markdown: 432 lines  
TOML: 37 lines

总结

本文介绍了 Rust 生态中优秀的代码统计库 tokei,它通过语法分析实现了准确统计,支持 200 多种语言,拥有命令行工具和 API 两种使用方式。tokei 的实现非常优雅,代码简洁,也是学习 Rust 编程的很好示例。感兴趣的读者可以阅读 tokei 源码,必有收获。

参考文章

标签:src,代码,Rust,利器,let,tokei,统计
From: https://www.cnblogs.com/RioTian/p/18159572

相关文章

  • 译文 | Rust 中无法办到的事情(以及如何替代)
    译者:RivTian原文:Here作为 Rustsubreddit的主持人,我经常发布有关开发人员试图将其各自的语言范例转换为Rust的帖子,结果不一而足,取得了不同程度的成功。在本指南中,我将描述开发人员在将其他语言范例转换为Rust时遇到的一些问题,并提出一些替代解决方案来帮助你客服Rust......
  • Rust简易入门(六)
    泛型泛型是一种编程语言的特性,它允许在代码中使用参数化类型,以便在不同地方使用相同的代码逻辑处理多种数据类型,而无需为每种类型编写单独的代码!泛型的应用类型泛型定义结构体、枚举泛型定义函数泛型与特质泛型结构体#[derive(Debug)]structPoint<T>{x:T,......
  • Rust简易入门(九)
    闭包的基础概念闭包是一种可以捕获其环境中变量的匿名函数闭包的语法相对简洁灵活,同时也具有强大的功能。闭包在Rust中被广泛用于函数式编程、并发编程以及简化代码等方面。定义闭包的语法类似(但更简单)在|内定义参数可选地指定参数/返回类型在{}内定义闭包体你......
  • Rust简易入门(七)
    迭代与循环循环定义:循环是一种控制流结构,它会反复执行一组语句,直到满足某个条件。控制条件:循环通常包含一个条件表达式,只有在条件为真时,循环体中的语句才会执行。退出条件:循环执行直到条件不再满足,或者通过break语句显式中断循环。使用场景:适用于需要反复执行某个操作直到满......
  • 我为什么学习Rust编程?
    2024-04-24下午,今下午感受到如果要睡觉就应该让音响在自己耳边程序轰炸.翻看gitee,又再次看到这个loop示例,这几天忙于工作,除了偶尔刷下rust视频,rust的电子书,其他的都看得比较少,主要还是感觉工作疲倦之余已经没有精力来继续回顾和延伸.其实后来感觉不是的,就像那会儿接......
  • Rust所有权__Ownership Rules
    First,let’stakealookattheownershiprules.Keeptheserulesinmindaswethroughtheexamplesthatillustratethem:     EachvalueinRusthasanowner.     Therecanonlybeoneowneratatime.     Whentheownergoesoutofsc......
  • 【rust】《Rust深度学习[6]-简单实现逻辑回归(Linfa)》
    什么是LinfaLinfa是一组Rust高级库的集合,提供了常用的数据处理方法和机器学习算法。Linfa对标Python上的 scikit-learn,专注于日常机器学习任务常用的预处理任务和经典机器学习算法,目前Linfa已经实现了scikit-learn中的全部算法。项目结构依赖[package]name="rust-ml-e......
  • 【rust】《Rust深度学习[4]-理解线性网络(Candle)》
    全连接/线性在神经网络中,全连接层,也称为线性层,是一种层,其中来自一层的所有输入都连接到下一层的每个激活单元。在大多数流行的机器学习模型中,网络的最后几层是完全连接的。实际上,这种类型的层执行基于在先前层中学习的特征输出类别预测的任务。全连接层的示例,具有四个输入节点......
  • 【rust】《Rust深度学习[5]-理解卷积神经网络(Candle)》
    卷积神经网络ConvolutionalNeuralNetwork,简称为CNN。CNN与一般的顺传播型神经网络不同,它不仅是由全结合层,还由卷积层(ConvolutionLayer)和池层(PoolingLayer)构成的神经网络。在卷积层和池化层中,如下图所示,缩小输入神经元的一部分区域,局部地与下一层进行对应。每一层都有一个称......
  • 【rust】《Rust深度学习[2]-数据分析和挖掘库(Polars)》
    什么是Polars?Polars是一个用于操作结构化数据的高性能DataFrame库,可以用来进行数据清洗和格式转换、数据分析和统计、数据可视化、数据读取和存储、数据合并和拼接等等,相当于Rust版本的Pandas库。Polars读写数据支持如下:  常见数据文件:csv、parquet(不支持xlsx、json文件) ......