sarifkit

    Pure MoonBit SARIF 2.1.0 report builder, validator and merger

    sarif
    static-analysis
    diagnostics
    ci
    security
    Download zip
    Author
    Version
    0.1.1
    License
    MIT
    Last updated
    2 months ago
    Downloads
    41

    No dependencies

    #Derk2006/sarifkit

    Derk2006/sarifkit 是一个 MoonBit 原生 SARIF 2.1.0 报告工具库,用于静态分析、lint、安全扫描、包质量检查和 CI 诊断结果的结构化输出。

    SARIF 是 GitHub Code Scanning、静态分析器和安全工具常用的交换格式。本项目提供报告构造、JSON 输出、轻量解析、校验诊断、统计摘要、结果筛选、日志合并、baseline 标记、GitHub annotation 转换、规则模板目录和 SARIF 字段目录,便于 MoonBit 生态中的开发工具直接生成可上传、可审计、可维护的诊断报告。

    #安装

    moon add Derk2006/sarifkit@0.1.1

    Mooncakes 包名:

    Derk2006/sarifkit

    #快速示例

    test {
    let log = @sarifkit.quick_log(
    "moonlint",
    "MB001",
    "debug print should be removed",
    "src/main.mbt",
    12,
    column=3,
    )
    inspect(log.summary(), content="runs=1 rules=1 results=1 errors=0 warnings=1 notes=0 artifacts=1")
    }

    #本地运行

    moon check moon build moon test moon doc moon run cmd/main moon package

    #核心能力

    • SARIF 2.1.0 数据模型:SarifLog、SarifRun、SarifResult、SarifRule、Region、Artifact
    • 构造器:SarifBuilder、quick_log、add_fingerprinted_result
    • JSON:SarifLog::to_json_string、SarifLog::from_json_string
    • 校验:validate、validate_with_policy、SarifValidationPolicy
    • 统计:stats、rule_summaries、summary、markdown_report
    • 筛选:filter_by_level、filter_by_rule、filter_by_uri、limit_results_per_run
    • 合并:merge_with、merge_logs、merge_runs_by_tool
    • baseline:mark_against、baseline_summary
    • CI 注解:github_annotations、github_annotation_commands
    • 指纹:stable_hash、stable_result_key、with_stable_fingerprints
    • 目录:catalog_rules、catalog_lookup、schema_fields、schema_lookup

    #适用场景

    • MoonBit lint、格式检查、包质量扫描输出 SARIF
    • CI 中把错误、警告和说明转换成 GitHub workflow annotation
    • 多个工具的诊断结果合并为一个报告
    • 发布前比较当前扫描结果和历史 baseline
    • 将包元数据、许可证、README、示例和测试检查结果结构化记录
    • 为开发工具 UI 提供 SARIF 字段说明和规则模板

    #生态定位

    本项目定位为可被其他 MoonBit 开发工具复用的 SARIF 报告层,不是单一 SARIF 类型定义,也不是某个具体扫描工具的内置输出模块。项目重点覆盖从诊断结果到可上传 SARIF 报告的完整链路,包括构造、轻量解析、校验策略、统计、筛选、合并、baseline、GitHub annotation、规则模板目录和字段目录。

    #支持范围

    • 单文件 SARIF 2.1.0 日志
    • 单 run 与多 run 构造、合并和筛选
    • tool.driver、rules、results、locations、artifacts、invocations、automationDetails
    • result level、kind、baselineState、partialFingerprints、properties
    • 基础 JSON 编码和核心字段解码
    • 常见规则模板与 SARIF schema 字段目录

    #暂不支持范围

    • 完整 SARIF 官方 JSON Schema 的全字段强校验
    • 外部文件读取、网络上传或平台 API 调用
    • codeFlows、threadFlows、graphs、taxonomies 的完整建模
    • SARIF 压缩、签名和大型日志流式编码

    #开源与合规

    本项目采用 MIT 许可证。项目为原创 MoonBit 实现,不移植第三方源代码,不包含来源不明素材或私有代码。SARIF 相关字段和语义依据公开格式约定实现,核心功能全部使用 MoonBit 编写。

    #工程记录

    • 项目申报书:SUBMISSION.md
    • 设计说明:docs/DESIGN.md
    • Mooncakes 非重复调研:docs/MOONCAKES_RESEARCH.md
    • 工单记录:docs/WORKLOG.md
    • 测试记录:docs/TEST_RECORD.md
    • 版本发布记录:docs/RELEASE_NOTES.md
    • 更新日志:CHANGELOG.md

    Artifact

    pub struct Artifact {
    location : ArtifactLocation
    length : Int?
    mime_type : String?
    roles : Array[String]
    } derive(Eq, ToJson,
    Debug
    )

    Artifact::Artifact

    fn Artifact::Artifact(uri : StringView, length? : Int, mime_type? : String, roles? : ArrayView[String]) -> Artifact

    ArtifactLocation

    pub struct ArtifactLocation {
    uri : String
    uri_base_id : String?
    index : Int?
    } derive(Eq, ToJson,
    Debug
    )

    URI location for an artifact. uri_base_id mirrors SARIF's uriBaseId field and is useful when a CI runner wants relative paths anchored to a checkout root.

    ArtifactLocation::ArtifactLocation

    fn ArtifactLocation::ArtifactLocation(uri : StringView, uri_base_id? : String, index? : Int) -> ArtifactLocation

    Fingerprint

    pub struct Fingerprint {
    key : String
    value : String
    } derive(Eq, ToJson,
    Debug
    )

    Fingerprint::Fingerprint

    fn Fingerprint::Fingerprint(key : StringView, value : StringView) -> Fingerprint

    GithubAnnotation

    pub struct GithubAnnotation {
    path : String
    start_line : Int
    end_line : Int
    annotation_level : String
    message : String
    title : String?
    } derive(Eq, ToJson,
    Debug
    )

    GithubAnnotation::GithubAnnotation

    fn GithubAnnotation::GithubAnnotation(path : StringView, start_line : Int, end_line : Int, annotation_level : StringView, message : StringView, title? : String) -> GithubAnnotation

    GithubAnnotation::workflow_command

    fn GithubAnnotation::workflow_command(self : GithubAnnotation) -> String

    PhysicalLocation

    pub struct PhysicalLocation {
    artifact_location : ArtifactLocation
    region : Region?
    } derive(Eq, ToJson,
    Debug
    )

    PhysicalLocation::PhysicalLocation

    fn PhysicalLocation::PhysicalLocation(artifact_location : ArtifactLocation, region? : Region) -> PhysicalLocation

    PhysicalLocation::from_path

    fn PhysicalLocation::from_path(uri : StringView, line : Int, column? : Int) -> PhysicalLocation

    Region

    pub struct Region {
    start_line : Int
    start_column : Int
    end_line : Int?
    end_column : Int?
    char_offset : Int?
    char_length : Int?
    } derive(Eq, ToJson,
    Debug
    )

    Region in an artifact. SARIF positions are one-based. End positions are optional because many diagnostics naturally refer to a single point.

    Region::Region

    fn Region::Region(start_line : Int, start_column? : Int, end_line? : Int, end_column? : Int, char_offset? : Int, char_length? : Int) -> Region

    Region::contains_line

    fn Region::contains_line(self : Region, line : Int) -> Bool

    Region::single_line

    fn Region::single_line(line : Int, start_column : Int, end_column : Int) -> Region

    Region::span_text

    fn Region::span_text(self : Region) -> String

    RuleSummary

    pub struct RuleSummary {
    rule_id : String
    count : Int
    errors : Int
    warnings : Int
    notes : Int
    } derive(Eq, ToJson,
    Debug
    )

    RuleSummary::markdown_row

    fn RuleSummary::markdown_row(self : RuleSummary) -> String

    SarifBuilder

    pub struct SarifBuilder {
    tool_name : String
    tool_version : String?
    information_uri : String?
    rules : Array[SarifRule]
    results : Array[SarifResult]
    artifacts : Array[Artifact]
    invocations : Array[SarifInvocation]
    automation_id : String?
    } derive(
    Debug
    )

    Mutable builder for constructing a single-run SARIF log.

    SarifBuilder::SarifBuilder

    fn SarifBuilder::SarifBuilder(tool_name : StringView, tool_version? : String, information_uri? : String) -> SarifBuilder

    SarifBuilder::add_artifact

    fn SarifBuilder::add_artifact(self : SarifBuilder, uri : StringView, length? : Int, mime_type? : String, roles? : ArrayView[String]) -> Int

    SarifBuilder::add_fingerprinted_result

    fn SarifBuilder::add_fingerprinted_result(self : SarifBuilder, rule_id : StringView, message : StringView, uri : StringView, line : Int, column? : Int, level? : String) -> Int

    SarifBuilder::add_invocation

    fn SarifBuilder::add_invocation(self : SarifBuilder, command_line? : String, working_directory? : String, execution_successful? : Bool) -> Unit

    SarifBuilder::add_result

    fn SarifBuilder::add_result(self : SarifBuilder, rule_id : StringView, message : StringView, level? : String, uri? : String, line? : Int, column? : Int) -> Int

    SarifBuilder::add_result_object

    fn SarifBuilder::add_result_object(self : SarifBuilder, result : SarifResult) -> Int

    SarifBuilder::add_rule

    fn SarifBuilder::add_rule(self : SarifBuilder, id : StringView, name? : String, short_description? : String, default_level? : String, tags? : ArrayView[String]) -> Int

    SarifBuilder::add_rule_object

    fn SarifBuilder::add_rule_object(self : SarifBuilder, rule : SarifRule) -> Int

    SarifBuilder::artifact_count

    fn SarifBuilder::artifact_count(self : SarifBuilder) -> Int

    SarifBuilder::log

    SarifBuilder::result_count

    fn SarifBuilder::result_count(self : SarifBuilder) -> Int

    SarifBuilder::rule_count

    fn SarifBuilder::rule_count(self : SarifBuilder) -> Int

    SarifBuilder::run

    SarifBuilder::set_automation_id

    fn SarifBuilder::set_automation_id(self : SarifBuilder, id : StringView) -> Unit

    SarifBuilder::set_information_uri

    fn SarifBuilder::set_information_uri(self : SarifBuilder, uri : StringView) -> Unit

    SarifBuilder::set_tool_version

    fn SarifBuilder::set_tool_version(self : SarifBuilder, version : StringView) -> Unit

    SarifDiagnostic

    pub struct SarifDiagnostic {
    severity : String
    code : String
    path : String
    message : String
    } derive(Eq, ToJson,
    Debug
    )

    SarifDiagnostic::SarifDiagnostic

    fn SarifDiagnostic::SarifDiagnostic(severity : StringView, code : StringView, path : StringView, message : StringView) -> SarifDiagnostic

    SarifDiagnostic::line

    fn SarifDiagnostic::line(self : SarifDiagnostic) -> String

    SarifError

    pub(all) enum SarifError {
    JsonParse(message~ : String)
    JsonDecode(path~ : String, expected~ : String)
    MissingField(field~ : String)
    InvalidField(field~ : String, message~ : String)
    } derive(Eq, ToJson,
    Debug
    )

    SarifError::message

    fn SarifError::message(self : SarifError) -> String

    SarifFieldDescriptor

    pub struct SarifFieldDescriptor {
    object_name : String
    field_name : String
    required : Bool
    value_kind : String
    note : String
    } derive(Eq, ToJson,
    Debug
    )

    SARIF schema field descriptors used by documentation, validation reports and tool UIs that need to explain which part of a SARIF log is being inspected. This is a compact MoonBit-native reference table, not a full replacement for the SARIF specification.

    SarifFieldDescriptor::SarifFieldDescriptor

    fn SarifFieldDescriptor::SarifFieldDescriptor(object_name : StringView, field_name : StringView, required? : Bool, value_kind? : String, note? : String) -> SarifFieldDescriptor

    SarifInvocation

    pub struct SarifInvocation {
    command_line : String?
    working_directory : String?
    execution_successful : Bool
    } derive(Eq, ToJson,
    Debug
    )

    SarifInvocation::SarifInvocation

    fn SarifInvocation::SarifInvocation(command_line? : String, working_directory? : String, execution_successful? : Bool) -> SarifInvocation

    SarifLocation

    pub struct SarifLocation {
    physical_location : PhysicalLocation
    message : SarifMessage?
    logical_name : String?
    } derive(Eq, ToJson,
    Debug
    )

    SarifLocation::SarifLocation

    fn SarifLocation::SarifLocation(physical_location : PhysicalLocation, message? : SarifMessage, logical_name? : String) -> SarifLocation

    SarifLocation::from_path

    fn SarifLocation::from_path(uri : StringView, line : Int, column? : Int, message? : String) -> SarifLocation

    SarifLog

    pub struct SarifLog {
    version : String
    schema : String?
    runs : Array[SarifRun]
    } derive(Eq, ToJson,
    Debug
    )

    SarifLog::SarifLog

    fn SarifLog::SarifLog(runs : ArrayView[SarifRun], schema? : String) -> SarifLog

    SarifLog::drop_baseline_absent

    fn SarifLog::drop_baseline_absent(self : SarifLog) -> SarifLog

    SarifLog::filter_by_level

    fn SarifLog::filter_by_level(self : SarifLog, minimum : StringView) -> SarifLog

    SarifLog::filter_by_rule

    fn SarifLog::filter_by_rule(self : SarifLog, rule_id : StringView) -> SarifLog

    SarifLog::filter_by_uri

    fn SarifLog::filter_by_uri(self : SarifLog, uri : StringView) -> SarifLog

    SarifLog::filter_results

    fn SarifLog::filter_results(self : SarifLog, keep : (SarifResult) -> Bool) -> SarifLog

    SarifLog::from_json

    fn SarifLog::from_json(json : Json) -> Result[SarifLog, SarifError]

    SarifLog::from_json_string

    fn SarifLog::from_json_string(text : StringView) -> Result[SarifLog, SarifError]

    SarifLog::github_annotation_commands

    fn SarifLog::github_annotation_commands(self : SarifLog) -> Array[String]

    SarifLog::github_annotations

    fn SarifLog::github_annotations(self : SarifLog) -> Array[GithubAnnotation]

    SarifLog::is_valid

    fn SarifLog::is_valid(self : SarifLog) -> Bool

    SarifLog::limit_results_per_run

    fn SarifLog::limit_results_per_run(self : SarifLog, max : Int) -> SarifLog

    SarifLog::mark_against

    fn SarifLog::mark_against(self : SarifLog, previous : SarifLog) -> SarifLog

    SarifLog::markdown_report

    fn SarifLog::markdown_report(self : SarifLog) -> String

    SarifLog::merge_with

    fn SarifLog::merge_with(self : SarifLog, other : SarifLog) -> SarifLog

    SarifLog::only_errors

    fn SarifLog::only_errors(self : SarifLog) -> SarifLog

    SarifLog::rule_summaries

    fn SarifLog::rule_summaries(self : SarifLog) -> Array[RuleSummary]

    SarifLog::stats

    fn SarifLog::stats(self : SarifLog) -> SarifStats

    SarifLog::summary

    fn SarifLog::summary(self : SarifLog) -> String

    SarifLog::to_json

    fn SarifLog::to_json(self : SarifLog) -> Json

    SarifLog::to_json_string

    fn SarifLog::to_json_string(self : SarifLog, indent? : Int) -> String

    SarifLog::validate

    fn SarifLog::validate(self : SarifLog) -> Array[SarifDiagnostic]

    SarifLog::validate_with_policy

    fn SarifLog::validate_with_policy(self : SarifLog, policy : SarifValidationPolicy) -> Array[SarifDiagnostic]

    SarifLog::with_stable_fingerprints

    fn SarifLog::with_stable_fingerprints(self : SarifLog) -> SarifLog

    SarifLog::without_notes

    fn SarifLog::without_notes(self : SarifLog) -> SarifLog

    SarifMessage

    pub struct SarifMessage {
    text : String
    markdown : String?
    } derive(Eq, ToJson,
    Debug
    )

    Text carried by SARIF objects. SARIF allows both plain text and Markdown; the plain text form is required in most places and is kept as the stable fallback for tools that do not render Markdown.

    SarifMessage::SarifMessage

    fn SarifMessage::SarifMessage(text : StringView, markdown? : String) -> SarifMessage

    SarifProperty

    pub struct SarifProperty {
    key : String
    value : String
    } derive(Eq, ToJson,
    Debug
    )

    SarifProperty::SarifProperty

    fn SarifProperty::SarifProperty(key : StringView, value : StringView) -> SarifProperty

    SarifResult

    pub struct SarifResult {
    rule_id : String
    level : String
    kind : String
    message : SarifMessage
    locations : Array[SarifLocation]
    fingerprints : Array[Fingerprint]
    properties : Array[SarifProperty]
    baseline_state : String?
    } derive(Eq, ToJson,
    Debug
    )

    SarifResult::SarifResult

    fn SarifResult::SarifResult(rule_id : StringView, message : StringView, level? : String, kind? : String, locations? : ArrayView[SarifLocation], fingerprints? : ArrayView[Fingerprint], properties? : ArrayView[SarifProperty], baseline_state? : String) -> SarifResult

    SarifResult::fingerprint_value

    fn SarifResult::fingerprint_value(self : SarifResult, key : StringView) -> String?

    SarifResult::primary_region

    fn SarifResult::primary_region(self : SarifResult) -> Region?

    SarifResult::primary_uri

    fn SarifResult::primary_uri(self : SarifResult) -> String?

    SarifResult::property_value

    fn SarifResult::property_value(self : SarifResult, key : StringView) -> String?

    SarifResult::to_github_annotation

    fn SarifResult::to_github_annotation(self : SarifResult) -> GithubAnnotation?

    SarifResult::with_fingerprint

    fn SarifResult::with_fingerprint(self : SarifResult, key : StringView, value : StringView) -> SarifResult

    SarifResult::with_stable_fingerprint

    fn SarifResult::with_stable_fingerprint(self : SarifResult) -> SarifResult

    SarifRule

    pub struct SarifRule {
    id : String
    name : String?
    short_description : SarifMessage?
    full_description : SarifMessage?
    default_level : String
    help_uri : String?
    tags : Array[String]
    } derive(Eq, ToJson,
    Debug
    )

    SarifRule::SarifRule

    fn SarifRule::SarifRule(id : StringView, name? : String, short_description? : String, full_description? : String, default_level? : String, help_uri? : String, tags? : ArrayView[String]) -> SarifRule

    SarifRun

    pub struct SarifRun {
    tool : ToolDriver
    results : Array[SarifResult]
    artifacts : Array[Artifact]
    invocations : Array[SarifInvocation]
    automation_id : String?
    } derive(Eq, ToJson,
    Debug
    )

    SarifRun::SarifRun

    fn SarifRun::SarifRun(tool : ToolDriver, results? : ArrayView[SarifResult], artifacts? : ArrayView[Artifact], invocations? : ArrayView[SarifInvocation], automation_id? : String) -> SarifRun

    SarifRun::drop_baseline_absent

    fn SarifRun::drop_baseline_absent(self : SarifRun) -> SarifRun

    SarifRun::filter_by_level

    fn SarifRun::filter_by_level(self : SarifRun, minimum : StringView) -> SarifRun

    SarifRun::filter_by_rule

    fn SarifRun::filter_by_rule(self : SarifRun, rule_id : StringView) -> SarifRun

    SarifRun::filter_by_uri

    fn SarifRun::filter_by_uri(self : SarifRun, uri : StringView) -> SarifRun

    SarifRun::filter_results

    fn SarifRun::filter_results(self : SarifRun, keep : (SarifResult) -> Bool) -> SarifRun

    SarifRun::github_annotations

    fn SarifRun::github_annotations(self : SarifRun) -> Array[GithubAnnotation]

    SarifRun::limit_results

    fn SarifRun::limit_results(self : SarifRun, max : Int) -> SarifRun

    SarifRun::mark_against

    fn SarifRun::mark_against(self : SarifRun, previous : SarifRun) -> SarifRun

    SarifRun::markdown_report

    fn SarifRun::markdown_report(self : SarifRun) -> String

    SarifRun::merge_with

    fn SarifRun::merge_with(self : SarifRun, other : SarifRun) -> SarifRun

    SarifRun::only_errors

    fn SarifRun::only_errors(self : SarifRun) -> SarifRun

    SarifRun::rule_summaries

    fn SarifRun::rule_summaries(self : SarifRun) -> Array[RuleSummary]

    SarifRun::stats

    fn SarifRun::stats(self : SarifRun) -> SarifStats

    SarifRun::validate

    fn SarifRun::validate(self : SarifRun) -> Array[SarifDiagnostic]

    SarifRun::validate_with_policy

    fn SarifRun::validate_with_policy(self : SarifRun, policy : SarifValidationPolicy) -> Array[SarifDiagnostic]

    SarifRun::with_stable_fingerprints

    fn SarifRun::with_stable_fingerprints(self : SarifRun) -> SarifRun

    SarifRun::without_notes

    fn SarifRun::without_notes(self : SarifRun) -> SarifRun

    SarifStats

    pub struct SarifStats {
    runs : Int
    rules : Int
    results : Int
    artifacts : Int
    invocations : Int
    errors : Int
    warnings : Int
    notes : Int
    none : Int
    baselined : Int
    } derive(Eq, ToJson,
    Debug
    )

    SarifStats::empty

    fn SarifStats::empty() -> SarifStats

    SarifStats::has_blocking_findings

    fn SarifStats::has_blocking_findings(self : SarifStats) -> Bool

    SarifStats::markdown

    fn SarifStats::markdown(self : SarifStats) -> String

    SarifStats::summary

    fn SarifStats::summary(self : SarifStats) -> String

    SarifStats::total_findings

    fn SarifStats::total_findings(self : SarifStats) -> Int

    SarifValidationPolicy

    pub struct SarifValidationPolicy {
    require_results_have_locations : Bool
    require_declared_rules : Bool
    require_artifacts_for_locations : Bool
    min_level : String
    max_results_per_run : Int?
    } derive(Eq, ToJson,
    Debug
    )

    SarifValidationPolicy::SarifValidationPolicy

    fn SarifValidationPolicy::SarifValidationPolicy(require_results_have_locations? : Bool, require_declared_rules? : Bool, require_artifacts_for_locations? : Bool, min_level? : String, max_results_per_run? : Int) -> SarifValidationPolicy

    ToolDriver

    pub struct ToolDriver {
    name : String
    version : String?
    information_uri : String?
    rules : Array[SarifRule]
    } derive(Eq, ToJson,
    Debug
    )

    ToolDriver::ToolDriver

    fn ToolDriver::ToolDriver(name : StringView, version? : String, information_uri? : String, rules? : ArrayView[SarifRule]) -> ToolDriver

    baseline_summary

    fn baseline_summary(results : ArrayView[SarifResult]) -> String

    catalog_lookup

    fn catalog_lookup(rule_id : StringView) -> SarifRule?

    catalog_report

    fn catalog_report() -> String

    catalog_rule_ids

    fn catalog_rule_ids() -> Array[String]

    catalog_rule_sk001

    fn catalog_rule_sk001() -> SarifRule

    catalog_rule_sk002

    fn catalog_rule_sk002() -> SarifRule

    catalog_rule_sk003

    fn catalog_rule_sk003() -> SarifRule

    catalog_rule_sk004

    fn catalog_rule_sk004() -> SarifRule

    catalog_rule_sk005

    fn catalog_rule_sk005() -> SarifRule

    catalog_rule_sk006

    fn catalog_rule_sk006() -> SarifRule

    catalog_rule_sk007

    fn catalog_rule_sk007() -> SarifRule

    catalog_rule_sk008

    fn catalog_rule_sk008() -> SarifRule

    catalog_rule_sk009

    fn catalog_rule_sk009() -> SarifRule

    catalog_rule_sk010

    fn catalog_rule_sk010() -> SarifRule

    catalog_rule_sk011

    fn catalog_rule_sk011() -> SarifRule

    catalog_rule_sk012

    fn catalog_rule_sk012() -> SarifRule

    catalog_rule_sk013

    fn catalog_rule_sk013() -> SarifRule

    catalog_rule_sk014

    fn catalog_rule_sk014() -> SarifRule

    catalog_rule_sk015

    fn catalog_rule_sk015() -> SarifRule

    catalog_rule_sk016

    fn catalog_rule_sk016() -> SarifRule

    catalog_rule_sk017

    fn catalog_rule_sk017() -> SarifRule

    catalog_rule_sk018

    fn catalog_rule_sk018() -> SarifRule

    catalog_rule_sk019

    fn catalog_rule_sk019() -> SarifRule

    catalog_rule_sk020

    fn catalog_rule_sk020() -> SarifRule

    catalog_rule_sk021

    fn catalog_rule_sk021() -> SarifRule

    catalog_rule_sk022

    fn catalog_rule_sk022() -> SarifRule

    catalog_rule_sk023

    fn catalog_rule_sk023() -> SarifRule

    catalog_rule_sk024

    fn catalog_rule_sk024() -> SarifRule

    catalog_rule_sk025

    fn catalog_rule_sk025() -> SarifRule

    catalog_rule_sk026

    fn catalog_rule_sk026() -> SarifRule

    catalog_rule_sk027

    fn catalog_rule_sk027() -> SarifRule

    catalog_rule_sk028

    fn catalog_rule_sk028() -> SarifRule

    catalog_rule_sk029

    fn catalog_rule_sk029() -> SarifRule

    catalog_rule_sk030

    fn catalog_rule_sk030() -> SarifRule

    catalog_rule_sk031

    fn catalog_rule_sk031() -> SarifRule

    catalog_rule_sk032

    fn catalog_rule_sk032() -> SarifRule

    catalog_rule_sk033

    fn catalog_rule_sk033() -> SarifRule

    catalog_rule_sk034

    fn catalog_rule_sk034() -> SarifRule

    catalog_rule_sk035

    fn catalog_rule_sk035() -> SarifRule

    catalog_rule_sk036

    fn catalog_rule_sk036() -> SarifRule

    catalog_rule_sk037

    fn catalog_rule_sk037() -> SarifRule

    catalog_rule_sk038

    fn catalog_rule_sk038() -> SarifRule

    catalog_rule_sk039

    fn catalog_rule_sk039() -> SarifRule

    catalog_rule_sk040

    fn catalog_rule_sk040() -> SarifRule

    catalog_rule_sk041

    fn catalog_rule_sk041() -> SarifRule

    catalog_rule_sk042

    fn catalog_rule_sk042() -> SarifRule

    catalog_rule_sk043

    fn catalog_rule_sk043() -> SarifRule

    catalog_rule_sk044

    fn catalog_rule_sk044() -> SarifRule

    catalog_rule_sk045

    fn catalog_rule_sk045() -> SarifRule

    catalog_rule_sk046

    fn catalog_rule_sk046() -> SarifRule

    catalog_rule_sk047

    fn catalog_rule_sk047() -> SarifRule

    catalog_rule_sk048

    fn catalog_rule_sk048() -> SarifRule

    catalog_rule_sk049

    fn catalog_rule_sk049() -> SarifRule

    catalog_rule_sk050

    fn catalog_rule_sk050() -> SarifRule

    catalog_rules

    fn catalog_rules() -> Array[SarifRule]

    catalog_rules_by_level

    fn catalog_rules_by_level(minimum : StringView) -> Array[SarifRule]

    catalog_rules_by_tag

    fn catalog_rules_by_tag(tag : StringView) -> Array[SarifRule]

    default_validation_policy

    fn default_validation_policy() -> SarifValidationPolicy

    diagnostics_report

    fn diagnostics_report(items : ArrayView[SarifDiagnostic]) -> String

    diagnostics_summary

    fn diagnostics_summary(items : ArrayView[SarifDiagnostic]) -> String

    find_rule_by_id

    fn find_rule_by_id(rules : ArrayView[SarifRule], id : StringView) -> SarifRule?

    first_non_empty

    fn first_non_empty(primary : StringView, fallback : StringView) -> String

    github_annotation_level

    fn github_annotation_level(level : StringView) -> String

    is_blank

    fn is_blank(text : StringView) -> Bool

    is_known_baseline_state

    fn is_known_baseline_state(state : StringView) -> Bool

    is_known_kind

    fn is_known_kind(kind : StringView) -> Bool

    is_known_level

    fn is_known_level(level : StringView) -> Bool

    known_baseline_states

    fn known_baseline_states() -> Array[String]

    known_kinds

    fn known_kinds() -> Array[String]

    known_levels

    fn known_levels() -> Array[String]

    level_at_least

    fn level_at_least(level : StringView, minimum : StringView) -> Bool

    level_rank

    fn level_rank(level : StringView) -> Int

    mark_baseline

    fn mark_baseline(current : ArrayView[SarifResult], previous : ArrayView[SarifResult]) -> Array[SarifResult]

    merge_logs

    fn merge_logs(logs : ArrayView[SarifLog]) -> SarifLog

    merge_runs_by_tool

    fn merge_runs_by_tool(runs : ArrayView[SarifRun]) -> Array[SarifRun]

    normalize_level

    fn normalize_level(level : StringView) -> String

    quick_log

    fn quick_log(tool_name : StringView, rule_id : StringView, message : StringView, uri : StringView, line : Int, column? : Int, level? : String) -> SarifLog

    rule_summary_markdown

    fn rule_summary_markdown(items : ArrayView[RuleSummary]) -> String

    sample_error_result

    fn sample_error_result() -> SarifResult

    sample_error_rule

    fn sample_error_rule() -> SarifRule

    sample_log

    fn sample_log() -> SarifLog

    sample_result

    fn sample_result() -> SarifResult

    sample_rule

    fn sample_rule() -> SarifRule

    sample_run

    fn sample_run() -> SarifRun

    schema_catalog_report

    fn schema_catalog_report() -> String

    schema_field_001

    fn schema_field_001() -> SarifFieldDescriptor

    schema_field_002

    fn schema_field_002() -> SarifFieldDescriptor

    schema_field_003

    fn schema_field_003() -> SarifFieldDescriptor

    schema_field_004

    fn schema_field_004() -> SarifFieldDescriptor

    schema_field_005

    fn schema_field_005() -> SarifFieldDescriptor

    schema_field_006

    fn schema_field_006() -> SarifFieldDescriptor

    schema_field_007

    fn schema_field_007() -> SarifFieldDescriptor

    schema_field_008

    fn schema_field_008() -> SarifFieldDescriptor

    schema_field_009

    fn schema_field_009() -> SarifFieldDescriptor

    schema_field_010

    fn schema_field_010() -> SarifFieldDescriptor

    schema_field_011

    fn schema_field_011() -> SarifFieldDescriptor

    schema_field_012

    fn schema_field_012() -> SarifFieldDescriptor

    schema_field_013

    fn schema_field_013() -> SarifFieldDescriptor

    schema_field_014

    fn schema_field_014() -> SarifFieldDescriptor

    schema_field_015

    fn schema_field_015() -> SarifFieldDescriptor

    schema_field_016

    fn schema_field_016() -> SarifFieldDescriptor

    schema_field_017

    fn schema_field_017() -> SarifFieldDescriptor

    schema_field_018

    fn schema_field_018() -> SarifFieldDescriptor

    schema_field_019

    fn schema_field_019() -> SarifFieldDescriptor

    schema_field_020

    fn schema_field_020() -> SarifFieldDescriptor

    schema_field_021

    fn schema_field_021() -> SarifFieldDescriptor

    schema_field_022

    fn schema_field_022() -> SarifFieldDescriptor

    schema_field_023

    fn schema_field_023() -> SarifFieldDescriptor

    schema_field_024

    fn schema_field_024() -> SarifFieldDescriptor

    schema_field_025

    fn schema_field_025() -> SarifFieldDescriptor

    schema_field_026

    fn schema_field_026() -> SarifFieldDescriptor

    schema_field_027

    fn schema_field_027() -> SarifFieldDescriptor

    schema_field_028

    fn schema_field_028() -> SarifFieldDescriptor

    schema_field_029

    fn schema_field_029() -> SarifFieldDescriptor

    schema_field_030

    fn schema_field_030() -> SarifFieldDescriptor

    schema_field_031

    fn schema_field_031() -> SarifFieldDescriptor

    schema_field_032

    fn schema_field_032() -> SarifFieldDescriptor

    schema_field_033

    fn schema_field_033() -> SarifFieldDescriptor

    schema_field_034

    fn schema_field_034() -> SarifFieldDescriptor

    schema_field_035

    fn schema_field_035() -> SarifFieldDescriptor

    schema_field_036

    fn schema_field_036() -> SarifFieldDescriptor

    schema_field_037

    fn schema_field_037() -> SarifFieldDescriptor

    schema_field_038

    fn schema_field_038() -> SarifFieldDescriptor

    schema_field_039

    fn schema_field_039() -> SarifFieldDescriptor

    schema_field_040

    fn schema_field_040() -> SarifFieldDescriptor

    schema_field_041

    fn schema_field_041() -> SarifFieldDescriptor

    schema_field_042

    fn schema_field_042() -> SarifFieldDescriptor

    schema_field_043

    fn schema_field_043() -> SarifFieldDescriptor

    schema_field_044

    fn schema_field_044() -> SarifFieldDescriptor

    schema_field_045

    fn schema_field_045() -> SarifFieldDescriptor

    schema_field_046

    fn schema_field_046() -> SarifFieldDescriptor

    schema_field_047

    fn schema_field_047() -> SarifFieldDescriptor

    schema_field_048

    fn schema_field_048() -> SarifFieldDescriptor

    schema_field_049

    fn schema_field_049() -> SarifFieldDescriptor

    schema_field_050

    fn schema_field_050() -> SarifFieldDescriptor

    schema_field_051

    fn schema_field_051() -> SarifFieldDescriptor

    schema_field_052

    fn schema_field_052() -> SarifFieldDescriptor

    schema_field_053

    fn schema_field_053() -> SarifFieldDescriptor

    schema_field_054

    fn schema_field_054() -> SarifFieldDescriptor

    schema_field_055

    fn schema_field_055() -> SarifFieldDescriptor

    schema_field_056

    fn schema_field_056() -> SarifFieldDescriptor

    schema_field_057

    fn schema_field_057() -> SarifFieldDescriptor

    schema_field_058

    fn schema_field_058() -> SarifFieldDescriptor

    schema_field_059

    fn schema_field_059() -> SarifFieldDescriptor

    schema_field_060

    fn schema_field_060() -> SarifFieldDescriptor

    schema_field_061

    fn schema_field_061() -> SarifFieldDescriptor

    schema_field_062

    fn schema_field_062() -> SarifFieldDescriptor

    schema_field_063

    fn schema_field_063() -> SarifFieldDescriptor

    schema_field_064

    fn schema_field_064() -> SarifFieldDescriptor

    schema_field_065

    fn schema_field_065() -> SarifFieldDescriptor

    schema_field_066

    fn schema_field_066() -> SarifFieldDescriptor

    schema_field_067

    fn schema_field_067() -> SarifFieldDescriptor

    schema_field_068

    fn schema_field_068() -> SarifFieldDescriptor

    schema_field_069

    fn schema_field_069() -> SarifFieldDescriptor

    schema_field_070

    fn schema_field_070() -> SarifFieldDescriptor

    schema_field_071

    fn schema_field_071() -> SarifFieldDescriptor

    schema_field_072

    fn schema_field_072() -> SarifFieldDescriptor

    schema_field_073

    fn schema_field_073() -> SarifFieldDescriptor

    schema_field_074

    fn schema_field_074() -> SarifFieldDescriptor

    schema_field_075

    fn schema_field_075() -> SarifFieldDescriptor

    schema_field_076

    fn schema_field_076() -> SarifFieldDescriptor

    schema_field_077

    fn schema_field_077() -> SarifFieldDescriptor

    schema_field_078

    fn schema_field_078() -> SarifFieldDescriptor

    schema_field_079

    fn schema_field_079() -> SarifFieldDescriptor

    schema_field_080

    fn schema_field_080() -> SarifFieldDescriptor

    schema_field_081

    fn schema_field_081() -> SarifFieldDescriptor

    schema_field_082

    fn schema_field_082() -> SarifFieldDescriptor

    schema_field_083

    fn schema_field_083() -> SarifFieldDescriptor

    schema_field_084

    fn schema_field_084() -> SarifFieldDescriptor

    schema_field_085

    fn schema_field_085() -> SarifFieldDescriptor

    schema_field_086

    fn schema_field_086() -> SarifFieldDescriptor

    schema_field_087

    fn schema_field_087() -> SarifFieldDescriptor

    schema_field_088

    fn schema_field_088() -> SarifFieldDescriptor

    schema_field_089

    fn schema_field_089() -> SarifFieldDescriptor

    schema_field_090

    fn schema_field_090() -> SarifFieldDescriptor

    schema_field_091

    fn schema_field_091() -> SarifFieldDescriptor

    schema_field_092

    fn schema_field_092() -> SarifFieldDescriptor

    schema_field_093

    fn schema_field_093() -> SarifFieldDescriptor

    schema_field_094

    fn schema_field_094() -> SarifFieldDescriptor

    schema_field_095

    fn schema_field_095() -> SarifFieldDescriptor

    schema_field_096

    fn schema_field_096() -> SarifFieldDescriptor

    schema_field_097

    fn schema_field_097() -> SarifFieldDescriptor

    schema_field_098

    fn schema_field_098() -> SarifFieldDescriptor

    schema_field_099

    fn schema_field_099() -> SarifFieldDescriptor

    schema_field_100

    fn schema_field_100() -> SarifFieldDescriptor

    schema_field_101

    fn schema_field_101() -> SarifFieldDescriptor

    schema_field_102

    fn schema_field_102() -> SarifFieldDescriptor

    schema_field_103

    fn schema_field_103() -> SarifFieldDescriptor

    schema_field_104

    fn schema_field_104() -> SarifFieldDescriptor

    schema_field_105

    fn schema_field_105() -> SarifFieldDescriptor

    schema_field_106

    fn schema_field_106() -> SarifFieldDescriptor

    schema_field_107

    fn schema_field_107() -> SarifFieldDescriptor

    schema_field_108

    fn schema_field_108() -> SarifFieldDescriptor

    schema_field_109

    fn schema_field_109() -> SarifFieldDescriptor

    schema_field_110

    fn schema_field_110() -> SarifFieldDescriptor

    schema_field_111

    fn schema_field_111() -> SarifFieldDescriptor

    schema_field_112

    fn schema_field_112() -> SarifFieldDescriptor

    schema_field_113

    fn schema_field_113() -> SarifFieldDescriptor

    schema_field_114

    fn schema_field_114() -> SarifFieldDescriptor

    schema_field_115

    fn schema_field_115() -> SarifFieldDescriptor

    schema_field_116

    fn schema_field_116() -> SarifFieldDescriptor

    schema_field_117

    fn schema_field_117() -> SarifFieldDescriptor

    schema_field_118

    fn schema_field_118() -> SarifFieldDescriptor

    schema_field_119

    fn schema_field_119() -> SarifFieldDescriptor

    schema_field_120

    fn schema_field_120() -> SarifFieldDescriptor

    schema_field_121

    fn schema_field_121() -> SarifFieldDescriptor

    schema_field_122

    fn schema_field_122() -> SarifFieldDescriptor

    schema_field_123

    fn schema_field_123() -> SarifFieldDescriptor

    schema_field_124

    fn schema_field_124() -> SarifFieldDescriptor

    schema_field_125

    fn schema_field_125() -> SarifFieldDescriptor

    schema_field_126

    fn schema_field_126() -> SarifFieldDescriptor

    schema_field_127

    fn schema_field_127() -> SarifFieldDescriptor

    schema_field_128

    fn schema_field_128() -> SarifFieldDescriptor

    schema_field_129

    fn schema_field_129() -> SarifFieldDescriptor

    schema_field_130

    fn schema_field_130() -> SarifFieldDescriptor

    schema_field_131

    fn schema_field_131() -> SarifFieldDescriptor

    schema_field_132

    fn schema_field_132() -> SarifFieldDescriptor

    schema_field_133

    fn schema_field_133() -> SarifFieldDescriptor

    schema_field_134

    fn schema_field_134() -> SarifFieldDescriptor

    schema_field_135

    fn schema_field_135() -> SarifFieldDescriptor

    schema_fields

    fn schema_fields() -> Array[SarifFieldDescriptor]

    schema_fields_for

    fn schema_fields_for(object_name : StringView) -> Array[SarifFieldDescriptor]

    schema_lookup

    fn schema_lookup(object_name : StringView, field_name : StringView) -> SarifFieldDescriptor?

    schema_required_fields_for

    fn schema_required_fields_for(object_name : StringView) -> Array[SarifFieldDescriptor]

    stable_hash

    fn stable_hash(text : StringView) -> String

    stable_result_key

    fn stable_result_key(rule_id : StringView, message : StringView, uri : StringView, line : Int, column : Int) -> String