Node.js代码统计神器

统计代码行数

使用Node.js编写一个脚本,统计指定目录下所有文件的代码行数。

const fs = require('fs'); const path = require('path'); function countLinesInFile(filePath) { const content = fs.readFileSync(filePath, 'utf-8'); return content.split('\n').length; } function countLinesInDirectory(directory, extensions = ['.js']) { let totalLines = 0; function traverse(dir) { const files = fs.readdirSync(dir); files.forEach(file => { const fullPath = path.join(dir, file); const stat = fs.statSync(fullPath); if (stat.isDirectory()) { traverse(fullPath); } else if (extensions.includes(path.extname(file))) { const lines = countLinesInFile(fullPath); console.log(`${fullPath}: ${lines} lines`); totalLines += lines; } }); } traverse(directory); return totalLines; } const targetDir = process.argv[2] || '.'; const total = countLinesInDirectory(targetDir); console.log(`Total lines: ${total}`);

统计代码字符数

统计指定文件中各种字符的出现频率。

function countCharacters(text) { const result = {}; for (const char of text) { result[char] = (result[char] || 0) + 1; } return Object.entries(result) .sort((a, b) => b[1] - a[1]) .reduce((acc, [key, value]) => { acc[key] = value; return acc; }, {}); } const text = fs.readFileSync('example.js', 'utf-8'); console.log(countCharacters(text));

统计代码复杂度

使用简单的复杂度计算方法统计代码中的条件语句数量。

function calculateComplexity(code) { const complexityPatterns = [ /if\s*\(/g, /for\s*\(/g, /while\s*\(/g, /case\s+/g, /\?\s*.+:/g ]; return complexityPatterns.reduce((total, pattern) => { const matches = code.match(pattern) || []; return total + matches.length; }, 0); } const code = fs.readFileSync('example.js', 'utf-8'); console.log(`Code complexity: ${calculateComplexity(code)}`);

统计代码注释比例

计算代码中注释占总代码量的比例。

function calculateCommentRatio(code) { const totalLines = code.split('\n').length; const commentLines = code.split('\n').filter(line => { return line.trim().startsWith('//') || line.includes('/*'); }).length; return (commentLines / totalLines * 100).toFixed(2); } const code = fs.readFileSync('example.js', 'utf-8'); console.log(`Comment ratio: ${calculateCommentRatio(code)}%`);

编程语言C++ziqihao.cn++c语言的魅力
编程语言C++swsci.cn++c语言的魅力

编程语言C++www.ziqihao.cn++c语言的魅力
编程语言C++www.swsci.cn++c语言的魅力

编程语言C++www.share.ziqihao.cn++c语言的魅力
编程语言C++www.share.swsci.cn++c语言的魅力

编程语言C++www.blog.ziqihao.cn++c语言的魅力
编程语言C++www.blog.swsci.cn++c语言的魅力

编程语言C++read.share.ziqihao.cn++c语言的魅力
编程语言C++read.share.swsci.cn++c语言的魅力

这些代码片段可以根据实际需求进行组合或修改,用于不同的代码统计场景。使用时需要注意文件编码和路径处理等问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1190834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据毕设选题推荐:基于django的菜价可视化系统蔬菜销售分析与预测可视化系统【附源码、mysql、文档、调试+代码讲解+全bao等】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

存储技术全解:从基础到前沿

系统存储机制深度剖析技术文章大纲存储基础概念存储介质的分类(HDD、SSD、NVMe、NVM)存储层次结构(寄存器、缓存、主存、外存)数据存取的基本原理(寻址、读写、延迟)文件系统与存储管理文件系统的核心组件&…

基于广义Benders分解法的综合能源系统优化规划Matlab代码

✅作者简介:热爱数据处理、建模、算法设计的Matlab仿真开发者。🍎更多Matlab代码及仿真咨询内容点击 🔗:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。👇 关注我…

基于多目标粒子群算法冷热电联供综合能源系统运行优化Matlab实现

✅作者简介:热爱数据处理、建模、算法设计的Matlab仿真开发者。🍎更多Matlab代码及仿真咨询内容点击 🔗:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。👇 关注我…

洛谷 P10962:Computer ← 换根DP

​【题目来源】https://www.luogu.com.cn/problem/P10962http://acm.hdu.edu.cn/showproblem.php?pid=2196【题目描述】某学校在一段时间前购买了第一台计算机(因此这台计算机的编号是 1)。在最近几年中,学校又购买…

activiti7的强制绑定角色问题

角色强绑定问题及解决方案 在使用若依的基础上,本打算将activiti7集成进去,结果在测试调用activiti的api时返回前端"没有权限,请联系管理员授权" 本来还以为是若依的权限校验,结果通过debug发现日志中报…

SCADA与数字孪生(Digital Twin)系统的异同点在哪里?

SCADA(Supervisory Control and Data Acquisition,监控与数据采集系统)和数字孪生(Digital Twin)系统都是工业自动化、智能制造和基础设施管理中的关键技术,但它们在目标、功能、技术架构和应用场景上存在显…

AI狂飙与冷思考:一个准码农的2026开年观察

AI狂飙与冷思考:一个准码农的2026开年观察* { margin: 0; padding: 0; box-sizing: border-box } body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue&quo…

完整教程:人机交互(如 VR 手柄追踪、光标移动、手势识别)的滤波算法

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

生成式软件制造--AI驱动的软件开发 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【读书笔记】《稻盛和夫自传》

《稻盛和夫自传》:敬天爱人的人生与经营哲学 稻盛和夫的自传是一本全面记录其创业经历、经营哲学与方法论的著作。这本书不仅适用于企业家,更适合所有职场人士阅读。在当下内卷化严重的社会环境中,它帮助我们树立正确的工作观:不仅…

《把脉行业与技术趋势》-65-当你的人生轨迹与民族复兴的长波、技术革命的中波、行业爆发的短波同频共振时,平凡的努力,也会被时代放大成非凡的成就——这,便是“着道”的现代诠释。

民族的生命的周期、国家宏观政策的生命周期、行业发展的生命周期、技术发展生命周期、企业发展的周期、产品的发展生命周期、个人的职业操作周期,傅里叶级数的可视化用图示的方式展现了小周期要顺应大周期,多周期共振带来的杠杆效应。一、核心思想&#…

AI生成SQL的安全风险与测试框架

随着AI在软件开发中的普及,AI生成的SQL语句被广泛应用于数据库操作,但这也引入了新的安全隐患。SQL注入、未授权数据访问(拖库)和恶意删除(删库)已成为三大核心威胁。据行业报告,2025年因AI生成…

线段树合并

\(\text{luogu-4556}\) 村落里一共有 \(n\) 座房屋,并形成一个树状结构。然后救济粮分 \(m\) 次发放,每次选择两个房屋 \((x, y)\),然后对于 \(x\) 到 \(y\) 的路径上(含 \(x\) 和 \(y\))每座房子里发放一袋 \(z\…

454. 四数相加 II-day06

454. 四数相加 II 题目链接:https://leetcode.cn/problems/4sum-ii/description/ 思路:第一步:遍历nums1和nums2,统计「两数之和」的出现次数,存入哈希表map(键 = 两数之和,值 = 该和出现的次数); 第二步:遍…

《把脉行业与技术趋势》-69-股票的周期、产品的周期、企业的周期的相似性与不同,以及它们各自在不同阶段关注的重点和核心要素不同

这是一个极具战略价值的问题。股票、产品、企业三者虽相互嵌套、彼此影响,但它们的周期逻辑、驱动因素和阶段重心存在显著差异。理解其相似性与不同点,并掌握各阶段的核心关注要素,是投资者、创业者和管理者做出正确决策的关键。一、三者的本…

别让”高性能“骗了你 之数组池ArrayPool vs 数组Array

别让”高性能“骗了你 之数组池ArrayPool vs 数组Array别让”高性能“骗了你! 本文介绍了作者因为追求高性能而没有关注实际使用环境导致性能不升反降。高性能的ArrayPool在特殊工况下可能效率远低于普普通通的Array数…

若思中国发布2026年十大最具影响力战略咨询大师推荐榜 - 资讯焦点

2026 年中国战略咨询行业正经历技术重构与价值升级,AI 大数据驱动成为核心发展特征,行业从传统经验导向转向数据科学驱动,动态定位与实时响应能力成为核心竞争力。趋势层面,AI + 咨询深度融合、全周期陪跑服务模式…

大数据毕设选题推荐:基于大数据技术的Django框架下的学习资源推送系统的设计与实现基于Django+大数据的学习资源推送系统【附源码、mysql、文档、调试+代码讲解+全bao等】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

大模型测试的“评估指标”:BLEU?ROUGE?都不够!

传统指标的黄金时代与局限 在机器翻译与文本摘要时代,BLEU和ROUGE曾是指标领域的双璧。BLEU通过n-gram精确匹配衡量译文准确性,ROUGE则基于召回率评估摘要内容覆盖度。然而,当千亿参数大模型掀起生成式AI浪潮时,这些指标暴露了三…