sarifkit

Pure MoonBit SARIF 2.1.0 report builder, validator and merger

sarif
static-analysis
diagnostics
ci
security
moon add Derk2006/sarifkit@0.1.1
Download zip
Author
Version
0.1.1
License
MIT
Last updated
7 hours ago
Downloads
8
README

#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 数据模型:SarifLogSarifRunSarifResultSarifRuleRegionArtifact
  • 构造器:SarifBuilderquick_logadd_fingerprinted_result
  • JSON:SarifLog::to_json_stringSarifLog::from_json_string
  • 校验:validatevalidate_with_policySarifValidationPolicy
  • 统计:statsrule_summariessummarymarkdown_report
  • 筛选:filter_by_levelfilter_by_rulefilter_by_urilimit_results_per_run
  • 合并:merge_withmerge_logsmerge_runs_by_tool
  • baseline:mark_againstbaseline_summary
  • CI 注解:github_annotationsgithub_annotation_commands
  • 指纹:stable_hashstable_result_keywith_stable_fingerprints
  • 目录:catalog_rulescatalog_lookupschema_fieldsschema_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