@ faircopy/ 核心
公平复制的核心引擎. 提供类型,配置加载,文件解析度,以及规则导出. 此软件包适用于适配器和规则作者——大多数用户应安装 faircopy 换句话说.
安装
npm i @faircopy/core
公共 API
loadConfig(cwd?)
查找和装入 faircopy.config.ts (或 .js, (中文(简体) ), .mjs, (中文(简体) ), .cjs)通过 jiti投篮 ConfigError 如果没有找到配置.
import { loadConfig } from '@faircopy/core'
const { config, configPath } = await loadConfig(process.cwd())
loadConfigFile(filename) 装入精确的配置路径并解析导入
相对于那个文件.
resolveFiles(config, cwd?)
解析文件 globs from config.files,尊重 config.ignore 财务报告和审定财务报表 .gitignore。 。 。 .
忽略注释
为一条源线禁止每一条规则
// faircopy-ignore-next-line
<p>Intentional copy that would otherwise be reported.</p>
<p>Intentional copy.</p> {/* faircopy-ignore-line */}
添加逗号分隔的规则 ID 以压制那些规则 :
// faircopy-ignore-next-line no-em-dash, no-weasel-words
<p>Intentional rule exceptions.</p>
这些指令与行、块、JSX和HTML评论标记相配合.
import { resolveFiles } from '@faircopy/core'
const files = await resolveFiles(config, cwd)
lintFile(filePath, source, adapters, rules)
使用适当的适配器运行一组针对单个文件的解析规则.
import { lintFile } from '@faircopy/core'
const diagnostics = await lintFile(filePath, source, adapters, resolvedRules)
lintFileWithCoverage(filePath, source, adapters, rules)
回返 { diagnostics, coverage: { adapter, segments, characters } } 从一个
提取通行证. adapter: null 表示扩展不支持 。 无
片段/特征表示没有提取出非空泛的散文. 字符计数使用
UTF-16 代码单元并包括所保留的白空间. lintFile() 仍为
对现有呼叫者只诊断 API; 清空时使用覆盖 API
结果还必须证明提取范围.
parseSeverity(ruleConfig)
参数 a RuleConfig 输入值 { severity, options }。 。 。 .
关键类型
interface FaircopyConfig { files, ignore?, adapters?, rules, noGitignore?, concurrency? }
interface Adapter { name, extensions, extract(filePath, source) }
interface Rule<Opts> { id, description, check(input) }
interface Diagnostic { ruleId, severity, message, range, help?, suggest? }
interface ExtractedText { text, sourceMap, meta? }
见 类型.ts 整个计划.
代理输出
@faircopy/core/reporting 曝光 CLI、 Docs 和集成的可重用格式化 :
import { formatAgentCompact, buildAgentJsonPayload } from '@faircopy/core/reporting'
formatAgentCompact() 指向编码剂的诊断。 默认启用片段, 默认禁用字符字节区域, 两者都可以在全球配置, 或者通过规则配置 output.agentCompact。 。 。 .
export default defineConfig({
output: {
agentCompact: {
snippets: 'all',
snippetChars: 140,
chars: false,
rules: {
'no-em-dash': { snippets: 'first' },
},
},
},
})