协奏曲 linter
Linter提供了lintModel函数,为使用Spectral的Linting Concerto模型提供了有力而有效的解决方案. 它确保您的模型遵守预定义或自定义规则,促进代码库中的一致性、质量和可维护性.
目录
特征
模型输入
- Versatile 模型输入: 支持作为 CTO 字符串或解析的抽象语法树(AST)对象提供的协奏曲模型.
规则发现
- 自动规则发现:当没有指定明确的规则时,自动检测光谱规则文件(如:光谱.yaml,光谱.yml,光谱.json,光谱.js等)于当前或母目录中.
灵活性
- 自定义规则灵活性: 允许您指定其文件路径, 用于剪接规则, 从而启用自定义 Spectral 规则 .
命名空间过滤
- 命名空间过滤: 过滤器会按命名空间进行林入结果,具有可配置的排除模式. 默认,不包括
'concerto.*'财务报告和审定财务报表'org.accordproject.*'名称空间.
JSON 输出
- 结构化 JSON 输出: 返回内嵌结果采用一致的JSON格式,以便于与其他工具和工作流程进行整合.
开始
插座很定制 默认情况下,它会使用@accordproject/concerto-linter-default-rulesset来给任何 Concerto 模型加注,但您也可以扩展它或创建自定义规则集.
安装
通过 npm 安装软件包 :
npm install @accordproject/concerto-linter
提供协奏曲模式
LintModel 函数以两种格式之一接受您的 Concerto 模式:
作为 CTO 字符串
const model = `
namespace org.example
asset MyProduct {
o String ProductId
}
`;
作为已解析的 AST 对象
import { ModelManager } from '@accordproject/concerto-core';
const modelManager = new ModelManager();
const model = `
namespace org.example
asset MyProduct {
o String ProductId
}
`;
modelManager.addCTOModel(model);
const ast = modelManager.getAst();
规则集配置
协奏曲 Linter 提供了灵活的 ruleset 配置选项以适应您的项目需要.
默认规则
默认情况下, linter 使用 @accordproject/concerto-linter-default-ruleset,它为协奏曲模型提供了一整套规则. 此规则在未指定自定义规则时自动被应用 .
自定义规则
您可以从几个方面定制林定规则:
-
创建规则集文件 在项目目录中使用任何这些支持的格式:
.spectral.yaml.spectral.yml.spectral.json.spectral.js
-
指定规则路径 明确调用电线时:
const results = await lintModel(ast, {ruleset: 'path/to/your/custom-ruleset.yaml'}); -
强制默认规则
const results = await lintModel(ast, {ruleset: 'default'});
自动规则发现
当你打电话 lintModel 在不指定规则集的情况下, linter 将按以下顺序自动搜索规则集文件:
.spectral.yaml.spectral.yml.spectral.json.spectral.js
如果你想的话 部队 即使在工程中存在自定义规则集文件时使用内置默认规则集的linter, pass ruleset: 'default' 选项中:
import { lintModel } from '@accordproject/concerto-linter';
const results = await lintModel(ast, { ruleset: 'default' });
如果在当前目录或父目录中找不到这些文件, linter 将返回到使用默认规则(@accordproject/concerto-linter-default-ruleset) (中文(简体) ).
import { lintModel } from '@accordproject/concerto-linter';
// The linter will automatically detect ruleset files in your project
const results = await lintModel(ast); // Pass the AST object
// OR
const results = await lintModel(model); // Pass the CTO string directly
创建自定义规则
你可以创建自己的自定义规则来强制实施您的音乐会模式的特定规则. 关于创建自定义规则的详细指导意见,参见: 默认规则集文档。 。 。 .
自定义规则按照Spectral ruleset格式,可以在YAML,JSON或JavaScript中创建. 一旦创建, linter 将自动检测您的 rudeet 文件, 如果它使用标准名称之一, 或者您可以明确指定其路径, 如上面的例子所示 .
线性输出
LintModel 函数返回一个承诺, 以 JSON 格式解析出一系列林入结果 :
每期插图以平面 JSON 对象表示:
interface ILintResult {
/** Unique rule identifier (e.g. 'no-unused-concept') */
code: string;
/** Human-readable description of the violation */
message: string;
/** Severity level ('error' | 'warning' | 'info' | 'hint') */
severity: string;
/**
* JSONPath-style pointer as an array of keys/indices
* (e.g. ['declarations', 3])
*/
path: Array<string | number>;
/** Namespace where the violation occurred (e.g. 'org.accordproject') */
namespace: string;
}
示例输出 :
[
{
"code": "camel-case-properties",
"message": "Property 'FirstVal' should be camelCase (e.g. 'myProperty').",
"severity": "warning",
"path": ["declarations", 3],
"namespace": "org.example.model",
"source": "concerto-lintr"
}
命名空间过滤
默认情况下, 命名空间匹配的结果 'concerto.*' 财务报告和审定财务报表 'org.accordproject.*' 不包括产出。 您可以使用 excludeNamespaces 选项.
// Override default namespace exclusions
const results = await lintModel(ast, {
excludeNamespaces: ['org.example.*', 'com.acme.*']
});
// Combine custom ruleset and namespace filtering
const results = await lintModel(ast, {
ruleset: "D:\\linter-test\\my-ruleset.yaml",
excludeNamespaces: ['org.example.*']
});
许可证
Accord Project源代码文件在位于LICENSE文件的Apache许可证2.0版本(Apache-2.0)下提供. 协议项目文件文件根据创用CC-BY-4.0国际许可证提供.