Cloc的--force-lang-def在Ubuntu运行正常但Windows系统下失效问题咨询
问题根因
- 自定义语言定义文件换行符不兼容:Linux下生成的定义文件默认使用LF换行,Windows版本的cloc解析LF换行的规则文件时会出现识别错误,导致Gem语言的匹配规则未生效,Gemfile、Gemfile.lock无法被正确识别归类,被判定为未知文件忽略
- Windows系统隐藏文件干扰:Windows会自动在目录下生成
Thumbs.db、桌面配置.ini这类隐藏系统文件,cloc默认会扫描到这些非文本文件,计入忽略统计 - 路径格式错误:Windows路径使用反斜杠
\作为分隔符,若路径包含空格、中文等特殊字符未用引号包裹,会导致cloc无法正确加载语言定义文件,也无法正确识别待统计目录 - 规则文件存放位置错误:如果把自定义语言定义文件放在待统计的根目录内,cloc会将其作为待统计文件扫描,识别为未知类型后忽略
解决方法
- 调整语言定义文件换行符
用VS Code、记事本等工具打开自定义的语言定义文件,将换行格式从LF切换为CRLF后保存。 - 修正命令路径格式
给命令中所有的文件路径用英文双引号包裹,示例如下:cloc "C:\完整路径\到\根目录" --csv --force-lang-def="C:\完整路径\到\语言定义文件" - 添加系统隐藏文件过滤参数
执行命令时新增--exclude-hidden参数,过滤Windows自动生成的隐藏系统文件:cloc "C:\完整路径\到\根目录" --csv --force-lang-def="C:\完整路径\到\语言定义文件" --exclude-hidden - 调整规则文件存放位置
将自定义语言定义文件移到待统计的根目录之外,避免被cloc扫描到。 - 问题排查(可选)
如果调整后还是统计异常,可在命令中添加--verbose参数执行,查看具体被忽略的文件列表,针对性调整过滤规则即可。
内容的提问来源于stack exchange,提问作者Guru Stron
相关产品推荐
相关产品推荐

