QQ 计程器配置
配置参考 计数器。 。 。 .
@codometer/configuration 读取寄存器 codometer.config.ts 手和双手
返回一个完全默认的配置对象。 这是唯一一个知道
任何关于某一存放处的资料; @codometer/cli 措施
配置描述 .
npm install --save-dev @codometer/configuration
输入配置文件时直接安装它 . @codometer/cli
已经取决于它.
配置文件
A 类 codometer.config.{ts,mts,cts,js,mjs,cjs,json,jsonc} 文件从
路径 --config <path>,则需要:
搜索且没有默认文件 . format 是那个
字段每个配置必须设置——它没有代码级倒置——
和所有其他领域都是可选的.
import { type CodometerConfiguration } from "@codometer/configuration";
const codometerConfiguration: CodometerConfiguration = {
// Which report shape this run produces. Required; no default.
format: "markdown",
// Appended to the built-in exclusions (node_modules, dist, build, coverage,
// .nx), matched against repository-relative paths with `path.matchesGlob`.
exclude: ["notepads/**", "**/templates/**"],
// Ignore files in gitignore syntax, whose patterns exclude as well.
excludeFrom: ["configuration/.codometerignore"],
// Named sets of files measured alongside the codebase itself. The built-in
// `codebase` whole-tree scan is always present unless one of these entries
// replaces it by name.
inputs: [
{
analyses: ["size"],
compression: "gzip",
include: ["dist/**/*.js", "!dist/**/*.map.js"],
name: "compiled",
},
],
// Target an unqualified limit path belongs to.
defaultInput: "codebase",
// How high each measured metric may go.
limits: [
{ metric: "compiled.size", value: "8 KB" },
{ metric: "typescript.interfaces", severity: "warn", value: 500 },
],
// Destinations the measured statistics are written to.
outputs: [
{ indentation: 2, path: "output/codometer.json", type: "json" },
{
description: "Measured on every push.",
// Named something other than the defaults on purpose: a file holding the
// default start marker anywhere — a document like this one, explaining
// it — reads as already carrying the block, and gets no block of its own.
endMarker: "<!-- STATISTICS_END -->",
path: "README.md",
startMarker: "<!-- STATISTICS_START -->",
type: "markdown",
},
],
// Interpreter used for Python analysis; defaults to `python3`.
python: { command: "uv run python" },
};
export default codometerConfiguration;
输出路径相对于进程的工作目录被解析, 而不是
配置文件,所以将配置保存在 configuration/ 文件夹
仍然写入寄存器根 .
决议
需要配置路径 : ConfigurationService.loadConfiguration
使用一个 configurationPath 没有其他的, 而CLI拒绝运行,没有
--config。相对路径将按工作目录解决,然后
寄存器根; 命名无文件的路径失败,但未找到错误.
单独回答命名的文件: 不折叠祖先的配置
这个 合并会留下一个限制 从来没有应用 完全像一个
让他们分道扬镳 意味着知道哪些文件
每一个球场来自。 配置文件总是被读作普通对象——一个导出为
函数不被识别,返回到空配置,即
文件导出的方式相同 42 已经.
测量到什么
发现者走过目录本身并读取 .gitignore 它过去了,所以
.gitignore 已经生效: 构建目录或虚拟环境
在它忽略了文件名的地方被剪贴, 并且没有排除它必须再次命名 .
Git 从未被引用, 因此一个根本不是寄存器的目录会被测量
和所测量的一样
而不是索引——一个存在且不被忽略的文件,无论它是否
已经承诺了。 两种排除方案是相反的
案例:保存但无人写的文件.
| 选项 | 语法 | 用它来 |
|---|---|---|
exclude | 球, 匹配为 path.matchesGlob | 内置默认的几条路径 |
excludeFrom | 忽略文件的路径, 用吉提格诺语法 | 锁定文件、销售捆绑、生成的文件——列表中一个仓库宁愿保存在文件中 |
excludeFrom 文件被读取为 gitignore 语法, 并本地匹配, 所以
否定、锚定和目录模式与
.gitignore,然后将codometer指向一个文件,另一个已经读取的工具给出
同样的答案,工具得到。 匹配在每个平台上都很敏感,
故意: git 从任何它发现自己的文件系统中取出它,和 a
在笔记本电脑和CI之间有分歧的测量比
严一.
在重用已存在的被忽略文件时要小心: 多数文件是为一个文件撰写的
工具的关切,而不是衡量。 A 类 .prettierignore 通常忽略所有
标记下,因为一个标记下 linter 处理它 - 点codometer 在那和
传言指标消失了。 专款 .codometerignore 通常比较好
答话.
投入
一个 投入 是一组有名的文件,由包含并排除阴道而宣布,
与分析 运行在它. inputs 是数组——替换什么
旧称 targets ——一个条目总是存在,无论是否
配置声明任何:内置 codebase 扫描,哪些措施
所有被忽略的文件都留下并运行 language 对它进行分析.
inputs: [
{
analyses: ["size"],
compression: "gzip",
exclude: ["dist/vendor/**"],
include: ["dist/**/*.js", "!dist/**/*.map.js"],
name: "compiled",
},
],
| 外地 | 需求 | 默认 | 含义 |
|---|---|---|---|
name | 对 | —— 说 | 何等为入. 两种投入可能不共享一种 |
include | 对 | —— 说 | 添加文件的手套 。 至少必须添加而不是去除 |
exclude | 没有 | 无 | 删除文件的球 |
analyses | 对 | —— 说 | language, (中文(简体) ), size或两者兼有。 至少一个 |
compression | 没有 | gzip | gzip, (中文(简体) ), brotli,或 none 用于磁盘上的字节 |
directory | 没有 | . | 与进程工作目录相比,输入的光泽开始之处 |
language 运行同样的分析器 代码库得到. size 压缩每个
匹配文件 独自一人 并总结结果,不是全部,
它会发现匹配的跨文件边界, 并报告总共没有客户端
永远收到。 Gzip在9级压缩,在11级压缩
明确而不是留待图书馆默认值.
A 类 ! 前缀在 include 删除文件而不是添加它们。 说明是
收集成一组,适用于整个输入,而不是顺序
它们被写入,因此重排数组不能更改文件
输入保存。 A 类 ! 内 exclude 被拒绝 : 该列表已经删除文件,
所以,没有什么可以否认的.
对已声明的输入不参考忽略文件 。 这是故意的,而且
用来衡量编译的输出的是什么——每个目录 .gitignore
因此,任何无视规则都无法达到。 文件输入
匹配但无法读取运行失败, 而不是计为 0 字节: a
完全悄悄的短于一个文件 比没有总数.
替换已建的编码库输入
声明命名的输入 codebase 替换内置全树扫描
而不是在它旁边添加:
inputs: [
{ analyses: ["language", "size"], compression: "none", include: ["**/*"], name: "codebase" },
],
仅限其 compression 财务报告和审定财务报表 analyses 读取. 内容 include 财务报告和审定财务报表 exclude
完全不参考阴道 ——全树扫描发现者
移动寄存器忽略文件,而不是匹配 globs,所以
include: ["**/*"] 上面是占位符,缩小到 src/** 将
没有什么狭窄的 要测量树的子集,请在
还有一些别的名字.
这是在不同的压缩下测量整个树的唯一方法 或一组分析,比内置条目运行.
限制
A 类 限制 测量的度量标准可能有多高。 任何衡量标准都可以包含一个——a 压缩大小、行数、以下公约的柜台——以及 测量和汇报的界限与以往完全相同 没什么.
defaultInput: "codebase",
limits: [
{ metric: "Compiled JavaScript.size", value: "8 KB" },
{ label: "Interfaces", metric: "typescript.interfaces", value: 500 },
{ metric: "linesOfCode", severity: "warn", value: 100_000 },
],
| 外地 | 需求 | 默认 | 含义 |
|---|---|---|---|
metric | 对 | —— 说 | 参数的点出路径 |
value | 对 | —— 说 | 作为数字或带有单位的字符串,衡量标准可能有多高 |
severity | 没有 | fail | fail 停止在突破处的跑道; warn 报告 |
label | 没有 | 路径 | 将限制称为报告 |
衡量标准由输入的名称及其路径处理
投入 - codebase.typescript.interfaces, (中文(简体) ), codebase.markdown.files, (中文(简体) ),
Compiled JavaScript.size。每个输入带 files,输入运行大小
分析带 size,而一个运行中的语言分析每个
计数器,并按 custom.<label>。 。 。 .
设定 defaultInput 而命名不输入的路径会被读取为该输入.
在一个 defaultInput 设置时,路径读取为输入时没有
输入名称的前缀——所以 defaultInput: "codebase" 和输入
调用 typescript, (中文(简体) ), typescript.interfaces 是密码库的,因为
typescript 输入没有 interfaces 和它竞争.
只要输入和计量组共用一个,就全部写入输入名称.
蒙昧被拒绝, 从来没有解决. 一条路可以命名两个标准——
名为输入 markdown 除了密码库 markdown.files 失败
运行时对两个读数进行命名,一个路径命名无,一个命名有
根据分析,输入从未运行。 限制,悄悄地绑在
错误的衡量标准 看起来像一个有效.
作为字符串写入的值带有 小数 追踪的单位 b 实值
要求: "8 KB" 8000个字节和 "1 MB" 千分之一,而 "8 K" 没有
大小,被拒绝 而不是被读作任何东西。 值无能读取
失败运行而不是被取为零.
匹配的输入 没有文件 运行失败, 如果且只在限制是时 写反对它。 声明限制表示文件已经存在, 所以空的 匹配是停止匹配的软体或从未运行的构造,而 输入无限制 仅计量为零, 这是不可注意的 .
自定义统计
按公约命名文件的寄存器没有语言词汇
分析师知道 高层 custom 数组是什么 措施 这些
计数器,不论任何产出是否或在何处产生:
custom: [
{ label: "Service Files", patterns: ["**/*.service.ts"] },
{ label: "Unit Tests", patterns: ["**/*.unit.test.ts"] },
{ color: "16a34a", label: "Migrations", patterns: ["**/migrations/*.sql"] },
],
每个条目都变成一个徽章,按照它被配置的顺序,随处可见
选中 。 球被匹配到寄存器关联路径
path.matchesGlob 在同一个发现的文档上,其他所有的措施,所以
不适用。 匹配数个条目的文档计算一次 .
color 是一个盾牌。 io 十六进制三进制; 省略其下一条条目
内置调色板的颜色,循环,所以计数器的颜色不变
运行之间.
一个计数器用三个字段中的一个来选择它的价值 patterns, (中文(简体) ),
symbols,或 comment - 并且至少需要其中之一,或者被拒绝作为
无所计.
输出本身 custom 数组是一个单独的后期关切: 选择, (中文(简体) ),
通过标签, 哪个顶级的计数器 目的地的 - 它从来没有
宣布自己的柜台。 JSON报告和降级报告可能仍然
选择完全不同的标签 :
custom: [
{ label: "Service Files", patterns: ["**/*.service.ts"] },
{ label: "Unit Tests", patterns: ["**/*.unit.test.ts"] },
],
outputs: [
{ custom: ["Service Files"], path: "codometer-report.json", type: "json" },
{ custom: ["Unit Tests"], path: "README.md", type: "markdown" },
],
标签输出选择顶级 custom 从来没有宣布
当配置加载时被拒绝 —— 选择不能设置一个计数器
从来没有被测量。 顶级的计数器宣布,但没有选择输出
仍然被测量,仍然被限制;它只是使无所事事.
计数声明
symbols 计算 TypeScript 和 JavaScript 源代码中的申报,而不是
文档。 它要求一个或一个以上 kinds,可选择缩小为声明
携带每个命名的修改符:
custom: [
{
group: "typescript",
label: "Static Methods",
symbols: { kinds: ["method"], modifiers: ["static"] },
},
{ label: "Abstract Classes", symbols: { kinds: ["class"], modifiers: ["abstract"] } },
],
kinds 为: class, (中文(简体) ), enum, (中文(简体) ), function, (中文(简体) ), getter, (中文(简体) ), interface, (中文(简体) ), method, (中文(简体) ),
property,以及 setter。 。 。 . modifiers 为: abstract, (中文(简体) ), async, (中文(简体) ), export, (中文(简体) ),
override, (中文(简体) ), private, (中文(简体) ), protected, (中文(简体) ), public, (中文(简体) ), readonly,以及 static。 。 。 .
二者从字面上读出,从语法上读出. 以班级成员身份撰写的可调用文字
是一个 method;一个写在任何地方是 function箭头函数
包含。 持有箭头函数的类字段是 property,则
箭头没有带字段的修饰符——所以 static build = () => {} 实值
通过要求静态属性,而不是静态方法找到. public 匹配
附加说明的成员 public,而非因疏忽而公开的成员,以及
private 不匹配一个 #name 字段,该字段根本没有修改符号.
符号计数器也可携带 patterns,然后缩小 哪些文件是
搜索 而不是被计算在内 patterns: ["packages/**"] 与
(单位:千美元) symbols 匹配者计数声明 packages/。计算发生在
typeScript 分析器已经做的行走,所以这些成本的任何数量
一个通过源.
选择注释预算
comment 选择用于计量的注释预算,而不是
计算文件或声明 :
custom: [
{ comment: { language: "yaml", maximumWords: 128 }, label: "YAML Comment Budget" },
{ comment: { kind: "class", maximumLines: 24 }, label: "Class Comment Budget" },
],
| 外地 | 需求 | 默认 | 含义 |
|---|---|---|---|
language | 没有 | 带有注释的每种语言 | 将预算缩减为其中之一 css, (中文(简体) ), hcl, (中文(简体) ), python, (中文(简体) ), shell, (中文(简体) ), sql, (中文(简体) ), toml, (中文(简体) ), typescript, (中文(简体) ), yaml |
kind | 没有 | 纯注释块 | 与一份有文件记录的声明的JSDoc风格的评论相去甚远 |
maximumCharacters | 没有 | —— 说 | 每个块可能持有多少个字符,标记和新行以及所有 |
maximumLines | 没有 | —— 说 | 每个块可跨几行 |
maximumWords | 没有 | —— 说 | 一旦标记被剥去,一个街区的传教词会保留多少 |
severity | 没有 | fail | fail 停止在突破处的跑道; warn 报告 |
内容 value 是一个计数 —— 选择者自己打破了多少块
maximumCharacters编号 :maximumLines编号 :maximumWords ——及其 instances 名称
每一个突破区 file 和 1 索引 line,加上它测量了多少.
留在预算范围内的区块对两者都不利.
一个没有的条目 patterns, (中文(简体) ), symbols,或 comment 被拒绝
而不是报告为永久零.
反间谍
group 命名徽章组,一个计数器将在该组的
内置徽章. 默认为 conventions - 一个只存在于
这些计数器,在没有属于它时完全省略。 任何已提供
组合可改为: css, (中文(简体) ), hcl, (中文(简体) ), json, (中文(简体) ), jupyter, (中文(简体) ), markdown, (中文(简体) ),
python, (中文(简体) ), repository, (中文(简体) ), shell, (中文(简体) ), sql, (中文(简体) ), toml, (中文(简体) ), typescript,或 yaml名称
该集外部失败了配置, 而不是无处渲染 .
默认调色板将每个组运行在顶层 custom 阵列,所以
在一个组中添加一个计数器,永远不会重新显示另一个组的徽章。 A 类
计数器的颜色一旦在那里定了下来——一个输出选择它返回
标签使分辨率给它的任何颜色,而不是循环
它自己的调色板.
产出
outputs 是一系列已输入的目的地, 以替换以前是
固定键 output 对象。 随你怎么说 包括不止一个
一类:
outputs: [
{ indentation: 2, path: "output/codometer.json", type: "json" },
{ path: "README.md", type: "markdown" },
],
需要 JSON 输入 path· ; indentation 默认为 2。减值条目
需要一个 path页:1 write 函数,或两者兼而有之——既未命名目的
配置加载时拒绝 .
写入 Markdown
默认减记报告是 description 后段为盾牌.io
一个下方的徽章 ### 每个语言的标题,在两个锚之间分解
标记. write 是整个自定义的行为 两者决定
报告所说的话,以及报告落地之处, 取代了过去的两个
单独 render 财务报告和审定财务报表 write 回调 :
{
path: "README.md",
type: "markdown",
write: ({ anchors, renderBadges, statistics }) =>
anchors.syncAnchoredBlock({
content: `Lines of code: ${statistics.linesOfCode}\n\n${renderBadges()}`,
}),
}
| 参数 | 含义 |
|---|---|
description | 配置的描述, 对于要自己放置的作者 |
renderBadges() | 这些相同统计数据的内置徽章渲染——称其为构建默认内容,或添加到其中 |
statistics | 计量统计 |
check | 当无法写入文件而文件仅被检查时为真 |
path | 已配置的路径, 根据进程的工作目录解决 |
anchors | 标记力学,所以选择不同的文件 并不意味着重用相片 |
| 锁定助手 | 对 |
|---|---|
anchors.syncAnchoredBlock({ content?, path? }) | 将块切入文件,在标记缺失时附加并创建文件。 在检查模式中,它比较而不是写入文件,并返回文件是否为当前文件 . |
anchors.wrapInAnchors(content?) | 返回包含在标记中的内容, 因为作者将它放在某个地方 . |
anchors.startMarker 编号 : anchors.endMarker | 已配置的标记 . |
离开 write 未设置保留内置渲染和写入 。 A 类 write
函数返回 false 将目的地报告为已失效
失败 --check 运行; 其它内容都算为最新.
出口
ConfigurationService 财务报告和审定财务报表 ConfigurationModule,加上
CodometerConfiguration 键入您的配置和解析的形状
cLI读取.
测试
nx run codometer-configuration:vitest
许可证
麻省理工学院——见 自由主义。 。 。 .
* 调和
这个项目源于 巢-服务-项目 符合模板.