moonbit-license-audit

A MoonBit license metadata auditor with SPDX expression checks.

spdx
license
compliance
audit
moonbit
moon add clbbbb/moonbit-license-audit@0.1.1
Download zip
Author
Version
0.1.1
License
MIT
Last updated
3 days ago
Downloads
4
README

#moonbit-license-audit

moonbit-license-audit is a small MoonBit library for auditing project license metadata. It checks moon.mod license declarations, source-file SPDX-License-Identifier headers, and SPDX expressions such as MIT OR Apache-2.0 or GPL-2.0-only WITH Classpath-exception-2.0.

#Features

  • extract SPDX license and copyright identifiers from line or block comments, validate them, and flag conflicting declarations
  • audit moon.mod license declarations against README text
  • tokenize and parse SPDX license expressions
  • support AND, OR, parentheses, and WITH exceptions
  • normalize common license and exception identifiers
  • use a compact built-in SPDX-oriented catalog for common open-source project licenses
  • list licenses, exceptions, operators, and expression depth
  • validate identifiers against a compact SPDX-oriented catalog
  • check expressions against allow/deny policies
  • parse simple policy configuration text
  • classify licenses by family and review risk
  • generate license obligation and notice checklists
  • build a source-file license inventory and flag divergence from the package license
  • validate a small hand-written third-party dependency manifest, including malformed records and duplicate fields
  • compare findings with a checked-in audit baseline for CI
  • produce project audit, release checklist, remediation, and evidence reports
  • render text, Markdown, CSV, and tree reports

#Install

moon add clbbbb/moonbit-license-audit@0.1.1

Local development:

moon check moon test moon run cmd/main

#Example

let expr = "MIT OR Apache-2.0"
println(normalize(expr))
println(validation_report(expr))
println(policy_report(expr, permissive_policy()))
println(policy_option_report(expr, permissive_policy()))
println(profile_table(expr))
println(scan_report("main.mbt", "// SPDX-License-Identifier: MIT\n"))
println(copyright_report("main.mbt", "// SPDX-FileCopyrightText: 2026 Example Contributors\n"))

SPDX identifiers embedded in ordinary source text are ignored. If a file carries more than one distinct SPDX identifier, the scanner reports a conflict instead of silently choosing one.

Project-level audit:

let moon_mod = "name = \"demo/pkg\"\nlicense = \"MIT\"\nrepository = \"https://example.invalid/demo/pkg\"\nreadme = \"README.mbt.md\"\n"
let readme = "# demo\n\nLicense: MIT\n"
let paths = ["src/a.mbt", "src/b.mbt"]
let sources = [
"// SPDX-License-Identifier: MIT\n",
"// SPDX-License-Identifier: Apache-2.0\n",
]
let audit = project_audit(moon_mod, readme, paths, sources, permissive_policy())
println(project_audit_report(audit))
println(remediation_report(audit))

Third-party manifest input is checked before it enters an evidence report. A record needs name, license, and source fields; unknown or repeated keys and non-boolean notice values are reported with line numbers.

let manifest = "name = \"demo-lib\"\nlicense = \"MIT\"\nsource = \"https://example.invalid/demo-lib\"\nnotice = true\n"
println(join_lines(third_party_manifest_errors(manifest)))

#Scope

This library is for engineering checks and metadata tooling. It does not provide legal advice and does not generate SPDX JSON documents. The catalog is compact by design; projects can still use the parser and policy layer while extending identifier coverage later.

#Difference from adjacent work

This project is not a general dependency visualizer, SBOM generator, or package registry scanner. Its boundary is deliberately smaller: parse and normalize license expressions, audit MoonBit project metadata, scan source SPDX headers, validate declared third-party inputs, and produce review-friendly CI evidence.

It also does not aim to be only a standalone SPDX-expression parser. The parser exists so MoonBit projects can run practical license metadata checks around moon.mod, README files, source headers, allow/deny policies, and release review notes.

#Data source

The built-in catalog intentionally covers common library licenses and common exceptions instead of embedding the full SPDX data set. This keeps the package reviewable and makes the project focus on audit behavior rather than a large generated table.

#License

MIT

#
AuditEvidence

pub struct AuditEvidence {
project : ProjectAudit
third_party_errors : Array[String]
baseline_new : Array[AuditFinding]
generated_files : Array[String]
} derive(Eq,
Debug
)

#
AuditFinding

pub struct AuditFinding {
path : String
kind : String
detail : String
} derive(Eq,
Debug
)

#
CompatibilityCell

pub struct CompatibilityCell {
left : String
right : String
compatible : Bool
reason : String
} derive(Eq,
Debug
)

#
Diagnostic

pub struct Diagnostic {
severity : String
message : String
suggestion : String
} derive(Eq,
Debug
)

#
Expr

pub(all) enum Expr {
License(String)
LicenseWithException(String, String)
And(Expr, Expr)
Or(Expr, Expr)
} derive(Eq,
Debug
)

#
FileRule

pub struct FileRule {
path : String
kind : String
should_scan : Bool
reason : String
} derive(Eq,
Debug
)

#
FixSuggestion

pub struct FixSuggestion {
target : String
severity : String
action : String
} derive(Eq,
Debug
)

#
LicenseProfile

pub struct LicenseProfile {
id : String
family : String
osi : Bool
copyleft : Bool
risk : String
note : String
} derive(Eq,
Debug
)

#
LicenseUse

pub struct LicenseUse {
path : String
expression : String
licenses : Array[String]
valid : Bool
} derive(Eq,
Debug
)

#
Obligation

pub struct Obligation {
key : String
title : String
detail : String
severity : String
} derive(Eq,
Debug
)

#
ParseResult

pub struct ParseResult {
ok : Bool
expr : Expr?
error : String
} derive(Eq,
Debug
)

#
ParseState

pub struct ParseState {
expr : Expr?
index : Int
error : String
} derive(Eq,
Debug
)

#
Policy

pub struct Policy {
allowed : Array[String]
denied : Array[String]
allow_copyleft : Bool
require_osi : Bool
} derive(Eq,
Debug
)

#
ProjectAudit

pub struct ProjectAudit {
package_name : String
package_license : String
readme_ok : Bool
source_count : Int
missing_headers : Int
invalid_headers : Int
policy_errors : Array[String]
warnings : Array[String]
} derive(Eq,
Debug
)

#
ReadmeAudit

pub struct ReadmeAudit {
has_title : Bool
has_license : Bool
has_install : Bool
has_usage : Bool
has_example : Bool
mentioned_licenses : Array[String]
} derive(Eq,
Debug
)

#
ReleaseItem

pub struct ReleaseItem {
name : String
passed : Bool
detail : String
} derive(Eq,
Debug
)

#
SourceCopyright

pub struct SourceCopyright {
path : String
entries : Array[String]
found : Bool
valid : Bool
message : String
} derive(Eq,
Debug
)

#
SourceLicense

pub struct SourceLicense {
path : String
expression : String
found : Bool
valid : Bool
message : String
} derive(Eq,
Debug
)

#
ThirdPartyPackage

pub struct ThirdPartyPackage {
name : String
license : String
source : String
notice : Bool
} derive(Eq,
Debug
)

#
Token

pub struct Token {
kind : TokenKind
text : String
offset : Int
} derive(Eq,
Debug
)

#
TokenKind

pub(all) enum TokenKind {
Ident(String)
AndTok
OrTok
WithTok
LParen
RParen
} derive(Eq,
Debug
)

#
WorkspaceAudit

pub struct WorkspaceAudit {
project : ProjectAudit
readme : ReadmeAudit
inventory : Array[LicenseUse]
ignored_paths : Array[String]
} derive(Eq,
Debug
)

#
action_for_error

fn action_for_error(error : String) -> String

#
add_third_party_if_complete

fn add_third_party_if_complete(rows : Array[ThirdPartyPackage], name : String, license : String, source : String, notice : Bool) -> Unit

#
allowed_policy_options

fn allowed_policy_options(text : String, policy : Policy) -> Array[String]

#
alternative_texts

fn alternative_texts(text : String) -> Array[String]

#
alternatives

fn alternatives(expr : Expr) -> Array[Expr]

#
and_expr

fn and_expr(left : Expr, right : Expr) -> Expr

#
apache_obligations

fn apache_obligations() -> Array[Obligation]

#
ascii_space

fn ascii_space(ch : Char) -> Bool

#
audit_baseline_report

fn audit_baseline_report(paths : Array[String], sources : Array[String], policy : Policy, baseline_text : String) -> String

#
audit_bundle_report

fn audit_bundle_report(audit : ProjectAudit) -> String

#
audit_evidence

fn audit_evidence(project : ProjectAudit, packages : Array[ThirdPartyPackage], current_findings : Array[AuditFinding], baseline : Array[AuditFinding], policy : Policy) -> AuditEvidence

#
audit_finding

fn audit_finding(path : String, kind : String, detail : String) -> AuditFinding

#
audit_grade

fn audit_grade(audit : ProjectAudit) -> String

#
audit_passes

fn audit_passes(audit : ProjectAudit) -> Bool

#
audit_project_report

fn audit_project_report(moon_mod : String, readme : String, paths : Array[String], sources : Array[String], policy : Policy) -> String

#
audit_readme

fn audit_readme(readme : String) -> ReadmeAudit

#
audit_score

fn audit_score(audit : ProjectAudit) -> Int

#
audit_workspace_report

fn audit_workspace_report(moon_mod : String, readme : String, paths : Array[String], sources : Array[String], policy : Policy) -> String

#
baseline_is_valid

fn baseline_is_valid(text : String) -> Bool

#
baseline_markdown

fn baseline_markdown(current : Array[AuditFinding], baseline : Array[AuditFinding]) -> String

#
baseline_parse_errors

fn baseline_parse_errors(text : String) -> Array[String]

#
baseline_passes

fn baseline_passes(current : Array[AuditFinding], baseline : Array[AuditFinding]) -> Bool

#
baseline_report

fn baseline_report(current : Array[AuditFinding], baseline : Array[AuditFinding]) -> String

#
bool_word

fn bool_word(value : Bool) -> String

#
build_inventory

fn build_inventory(paths : Array[String], sources : Array[String]) -> Array[LicenseUse]

#
canonical_exception

fn canonical_exception(id : String) -> String

#
canonical_license

fn canonical_license(id : String) -> String

#
check_mark

fn check_mark(passed : Bool) -> String

#
choice_count

fn choice_count(text : String) -> Int

#
ci_annotation

fn ci_annotation(evidence : AuditEvidence) -> String

#
ci_should_fail

fn ci_should_fail(evidence : AuditEvidence) -> Bool

#
classify_path

fn classify_path(path : String) -> FileRule

#
clean_comment_tail

fn clean_comment_tail(text : String) -> String

#
collect_manifest_findings

fn collect_manifest_findings(moon_mod : String, readme : String, package_license : String, warnings : Array[String], policy_items : Array[String], policy : Policy) -> Unit

#
collect_source_alignment

fn collect_source_alignment(results : Array[SourceLicense], package_license : String, warnings : Array[String]) -> Unit

#
collect_source_findings

fn collect_source_findings(results : Array[SourceLicense], warnings : Array[String], policy_items : Array[String], policy : Policy) -> Unit

#
combine_policy_options

fn combine_policy_options(left : Array[Expr], right : Array[Expr]) -> Array[Expr]

#
comment_text

fn comment_text(line : String) -> String?

#
common_license_alias

fn common_license_alias(value : String) -> String

#
compatibility_cell

fn compatibility_cell(left : String, right : String, compatible : Bool, reason : String) -> CompatibilityCell

#
compatibility_errors

fn compatibility_errors(text : String) -> Array[String]

#
compatibility_matrix

fn compatibility_matrix(ids : Array[String]) -> Array[CompatibilityCell]

#
compatibility_matrix_report

fn compatibility_matrix_report(cells : Array[CompatibilityCell]) -> String

#
compatibility_report

fn compatibility_report(text : String) -> String

#
compatibility_summary

fn compatibility_summary(cells : Array[CompatibilityCell]) -> String

#
compatible_for_distribution

fn compatible_for_distribution(text : String) -> Bool

#
config_pair

fn config_pair(line : String) -> (String, String)?

#
contains_exception

fn contains_exception(expr : Expr, id : String) -> Bool

#
contains_license

fn contains_license(expr : Expr, id : String) -> Bool

#
contains_obligation

fn contains_obligation(items : Array[Obligation], key : String) -> Bool

#
contains_public_domain_style

fn contains_public_domain_style(expr : Expr) -> Bool

#
contains_string

fn contains_string(values : Array[String], value : String) -> Bool

#
contains_strong_copyleft

fn contains_strong_copyleft(expr : Expr) -> Bool

#
copyleft_licenses

fn copyleft_licenses() -> Array[String]

fn copyright_report(path : String, source : String) -> String

#
count_invalid_headers

fn count_invalid_headers(results : Array[SourceLicense]) -> Int

#
count_missing_headers

fn count_missing_headers(results : Array[SourceLicense]) -> Int

#
csv_report

fn csv_report(text : String) -> String

#
deprecated_exceptions

fn deprecated_exceptions() -> Array[String]

#
deprecated_licenses

fn deprecated_licenses() -> Array[String]

#
depth

fn depth(expr : Expr) -> Int

#
diagnostic

fn diagnostic(severity : String, message : String, suggestion : String) -> Diagnostic

#
diagnostics

fn diagnostics(text : String) -> Array[Diagnostic]

#
diagnostics_report

fn diagnostics_report(text : String) -> String

#
dominant_license

fn dominant_license(inventory : Array[LicenseUse]) -> String

#
duplicate_third_party_errors

fn duplicate_third_party_errors(packages : Array[ThirdPartyPackage], rows : Array[String]) -> Unit

#
evidence_error_count

fn evidence_error_count(evidence : AuditEvidence) -> Int

#
evidence_failures

fn evidence_failures(evidence : AuditEvidence) -> Array[String]

#
evidence_file_names

fn evidence_file_names() -> Array[String]

#
evidence_for_inputs

fn evidence_for_inputs(moon_mod : String, readme : String, paths : Array[String], sources : Array[String], packages_text : String, baseline_text : String, policy : Policy) -> AuditEvidence

#
evidence_inputs_report

fn evidence_inputs_report(moon_mod : String, readme : String, paths : Array[String], sources : Array[String], packages_text : String, baseline_text : String, policy : Policy) -> String

#
evidence_markdown

fn evidence_markdown(evidence : AuditEvidence) -> String

#
evidence_passes

fn evidence_passes(evidence : AuditEvidence) -> Bool

#
evidence_report

fn evidence_report(evidence : AuditEvidence) -> String

#
evidence_status

fn evidence_status(evidence : AuditEvidence) -> String

#
evidence_summary

fn evidence_summary(evidence : AuditEvidence) -> String

#
evidence_warning_count

fn evidence_warning_count(evidence : AuditEvidence) -> Int

#
evidence_warnings

fn evidence_warnings(evidence : AuditEvidence) -> Array[String]

#
exception_suggestion

fn exception_suggestion(id : String) -> String

#
exceptions

fn exceptions(expr : Expr) -> Array[String]

#
explain_expression

fn explain_expression(text : String) -> String

#
expression_shape

fn expression_shape(text : String) -> String

#
expression_shape_expr

fn expression_shape_expr(expr : Expr) -> String

#
expression_stats

fn expression_stats(text : String) -> String

#
extract_moon_mod_license

fn extract_moon_mod_license(text : String) -> String?

#
extract_moon_mod_name

fn extract_moon_mod_name(text : String) -> String?

#
extract_quoted_value

fn extract_quoted_value(text : String, field : String) -> String?

#
extract_quoted_value_line

fn extract_quoted_value_line(line : String, field : String) -> String?

fn extract_spdx_copyright_texts(source : String) -> Array[String]

#
extract_spdx_expression

fn extract_spdx_expression(source : String) -> String?

#
extract_spdx_expressions

fn extract_spdx_expressions(source : String) -> Array[String]

#
extract_spdx_tag_values

fn extract_spdx_tag_values(source : String, marker : String) -> Array[String]

#
fail

fn fail(message : String) -> ParseResult

#
file_copyleft_obligations

fn file_copyleft_obligations(id : String) -> Array[Obligation]

#
file_rule

fn file_rule(path : String, kind : String, should_scan : Bool, reason : String) -> FileRule

#
file_rules_report

fn file_rules_report(paths : Array[String]) -> String

#
files_using_license

fn files_using_license(inventory : Array[LicenseUse], id : String) -> Array[String]

#
filter_sources_by_rule

fn filter_sources_by_rule(paths : Array[String], sources : Array[String]) -> (Array[String], Array[String])

#
finding_in

fn finding_in(findings : Array[AuditFinding], target : AuditFinding) -> Bool

#
finding_key

fn finding_key(finding : AuditFinding) -> String

#
findings_from_project

fn findings_from_project(audit : ProjectAudit) -> Array[AuditFinding]

#
findings_from_sources

fn findings_from_sources(paths : Array[String], sources : Array[String], policy : Policy) -> Array[AuditFinding]

#
findings_lines

fn findings_lines(findings : Array[AuditFinding]) -> Array[String]

#
first_invalid_spdx_expression

fn first_invalid_spdx_expression(expressions : Array[String]) -> String?

#
fix_suggestion

fn fix_suggestion(target : String, severity : String, action : String) -> FixSuggestion

#
format

fn format(expr : Expr) -> String

#
format_prec

fn format_prec(expr : Expr, parent : Int) -> String

#
has_empty_string

fn has_empty_string(values : Array[String]) -> Bool

#
highest_risk

fn highest_risk(text : String) -> String

#
ignored_paths

fn ignored_paths(paths : Array[String]) -> Array[String]

#
ignored_paths_report

fn ignored_paths_report(paths : Array[String]) -> String

#
incompatible_pairs

fn incompatible_pairs(cells : Array[CompatibilityCell]) -> Array[CompatibilityCell]

#
invalid_spdx_count

fn invalid_spdx_count(paths : Array[String], sources : Array[String]) -> Int

#
inventory_compatibility_matrix

fn inventory_compatibility_matrix(inventory : Array[LicenseUse]) -> Array[CompatibilityCell]

#
inventory_from_source_results

fn inventory_from_source_results(results : Array[SourceLicense]) -> Array[LicenseUse]

#
inventory_licenses

fn inventory_licenses(inventory : Array[LicenseUse]) -> Array[String]

#
inventory_markdown

fn inventory_markdown(inventory : Array[LicenseUse]) -> String

#
inventory_policy_errors

fn inventory_policy_errors(inventory : Array[LicenseUse], policy : Policy) -> Array[String]

#
inventory_policy_report

fn inventory_policy_report(inventory : Array[LicenseUse], policy : Policy) -> String

#
inventory_report

fn inventory_report(inventory : Array[LicenseUse]) -> String

#
is_bool_config_value

fn is_bool_config_value(value : String) -> Bool

#
is_copyleft_license

fn is_copyleft_license(id : String) -> Bool

#
is_deprecated_exception

fn is_deprecated_exception(id : String) -> Bool

#
is_deprecated_license

fn is_deprecated_license(id : String) -> Bool

#
is_known_exception

fn is_known_exception(id : String) -> Bool

#
is_known_license

fn is_known_license(id : String) -> Bool

#
is_osi_license

fn is_osi_license(id : String) -> Bool

#
is_policy_config_key

fn is_policy_config_key(key : String) -> Bool

#
is_third_party_field

fn is_third_party_field(key : String) -> Bool

#
is_valid

fn is_valid(text : String) -> Bool

#
join_lines

fn join_lines(values : Array[String]) -> String

#
join_tail

fn join_tail(parts : Array[String], start : Int, separator : String) -> String

#
join_with

fn join_with(values : Array[String], sep : String) -> String

#
known_exceptions

fn known_exceptions() -> Array[String]

#
known_licenses

fn known_licenses() -> Array[String]

#
license

fn license(id : String) -> Expr

#
license_family

fn license_family(id : String) -> String

#
license_needs_notice

fn license_needs_notice(id : String) -> Bool

#
license_note

fn license_note(id : String) -> String

#
license_pair_compatibility

fn license_pair_compatibility(left : String, right : String) -> CompatibilityCell

#
license_profile

fn license_profile(id : String) -> LicenseProfile

#
license_risk

fn license_risk(id : String) -> String

#
license_suggestion

fn license_suggestion(id : String) -> String

#
license_use

fn license_use(path : String, expression : String, licenses : Array[String], valid : Bool) -> LicenseUse

#
licenses

fn licenses(expr : Expr) -> Array[String]

#
lower_ascii

fn lower_ascii(text : String) -> String

#
markdown_report

fn markdown_report(text : String) -> String

#
max_int

fn max_int(a : Int, b : Int) -> Int

#
mentioned_license_ids

fn mentioned_license_ids(readme : String) -> Array[String]

#
merge_policy

fn merge_policy(base : Policy, extra : Policy) -> Policy

#
min_int

fn min_int(a : Int, b : Int) -> Int

fn missing_copyright_count(paths : Array[String], sources : Array[String]) -> Int

#
missing_spdx_count

fn missing_spdx_count(paths : Array[String], sources : Array[String]) -> Int

#
mixed_license_warning

fn mixed_license_warning(inventory : Array[LicenseUse], package_license : String) -> String

#
moon_mod_has_readme

fn moon_mod_has_readme(text : String) -> Bool

#
moon_mod_has_repository

fn moon_mod_has_repository(text : String) -> Bool

#
moon_mod_license_report

fn moon_mod_license_report(text : String) -> String

#
moon_mod_metadata_report

fn moon_mod_metadata_report(text : String) -> String

#
new_findings

fn new_findings(current : Array[AuditFinding], baseline : Array[AuditFinding]) -> Array[AuditFinding]

#
normalize

fn normalize(text : String) -> String

#
normalize_license_list

fn normalize_license_list(items : Array[String]) -> Array[String]

#
notice_checklist

fn notice_checklist(text : String) -> Array[String]

#
notice_checklist_report

fn notice_checklist_report(text : String) -> String

#
obligation

fn obligation(key : String, title : String, detail : String, severity : String) -> Obligation

#
obligations_for_expr

fn obligations_for_expr(expr : Expr) -> Array[Obligation]

#
obligations_for_license

fn obligations_for_license(id : String) -> Array[Obligation]

#
obligations_report

fn obligations_report(text : String) -> String

fn ok(expr : Expr) -> ParseResult

#
operators

fn operators(expr : Expr) -> Array[String]

#
option_or

fn option_or(value : String?, fallback : String) -> String

#
or_expr

fn or_expr(left : Expr, right : Expr) -> Expr

#
osi_approved

fn osi_approved() -> Array[String]

#
package_audit_report

fn package_audit_report(moon_mod : String, readme : String) -> String

#
parse

fn parse(text : String) -> ParseResult

#
parse_and

fn parse_and(tokens : Array[Token], start : Int) -> ParseState

#
parse_baseline

fn parse_baseline(text : String) -> Array[AuditFinding]

#
parse_baseline_line

fn parse_baseline_line(line : String) -> AuditFinding?

#
parse_bool

fn parse_bool(text : String) -> Bool

#
parse_license_tail

fn parse_license_tail(tokens : Array[Token], index : Int, id : String) -> ParseState

#
parse_or

fn parse_or(tokens : Array[Token], start : Int) -> ParseState

#
parse_or_panic

fn parse_or_panic(text : String) -> Expr

#
parse_policy_config

fn parse_policy_config(text : String) -> Policy

#
parse_primary

fn parse_primary(tokens : Array[Token], start : Int) -> ParseState

#
parse_third_party_manifest

fn parse_third_party_manifest(text : String) -> Array[ThirdPartyPackage]

#
parse_tree

fn parse_tree(text : String) -> String

#
paths_to_scan

fn paths_to_scan(paths : Array[String]) -> Array[String]

#
permissive_obligations

fn permissive_obligations(id : String) -> Array[Obligation]

#
permissive_policy

fn permissive_policy() -> Policy

#
policy_allows

fn policy_allows(text : String, policy : Policy) -> Bool

#
policy_config_errors

fn policy_config_errors(text : String) -> Array[String]

#
policy_config_report

fn policy_config_report(policy : Policy) -> String

#
policy_config_valid

fn policy_config_valid(text : String) -> Bool

#
policy_errors

fn policy_errors(text : String, policy : Policy) -> Array[String]

#
policy_errors_expr

fn policy_errors_expr(expr : Expr, policy : Policy) -> Array[String]

#
policy_errors_license

fn policy_errors_license(id : String, policy : Policy) -> Array[String]

#
policy_errors_with_exception

fn policy_errors_with_exception(id : String, ex : String, policy : Policy) -> Array[String]

#
policy_from_mode

fn policy_from_mode(mode : String) -> Policy

#
policy_option_expressions

fn policy_option_expressions(expr : Expr) -> Array[Expr]

#
policy_option_report

fn policy_option_report(text : String, policy : Policy) -> String

#
policy_report

fn policy_report(text : String, policy : Policy) -> String

#
prefix_errors

fn prefix_errors(prefix : String, errors : Array[String]) -> Array[String]

#
profile_row

fn profile_row(id : String) -> String

#
profile_table

fn profile_table(text : String) -> String

#
project_audit

fn project_audit(moon_mod : String, readme : String, paths : Array[String], sources : Array[String], policy : Policy) -> ProjectAudit

#
project_audit_markdown

fn project_audit_markdown(audit : ProjectAudit) -> String

#
project_audit_report

fn project_audit_report(audit : ProjectAudit) -> String

#
public_domain_style_obligations

fn public_domain_style_obligations(id : String) -> Array[Obligation]

#
push_markdown_section

fn push_markdown_section(rows : Array[String], title : String, items : Array[String]) -> Unit

#
push_section

fn push_section(rows : Array[String], title : String, items : Array[String]) -> Unit

#
quick_fix

fn quick_fix(text : String) -> String

#
quoted_prefix

fn quoted_prefix(text : String) -> String?

#
readme_audit_report

fn readme_audit_report(readme : String) -> String

#
readme_audit_report_from_audit

fn readme_audit_report_from_audit(audit : ReadmeAudit) -> String

#
readme_audit_warnings

fn readme_audit_warnings(audit : ReadmeAudit) -> Array[String]

#
readme_has_code_block

fn readme_has_code_block(readme : String) -> Bool

#
readme_has_license_section

fn readme_has_license_section(readme : String) -> Bool

#
readme_has_section

fn readme_has_section(readme : String, title : String) -> Bool

#
readme_has_title

fn readme_has_title(readme : String) -> Bool

#
readme_matches_package_license

fn readme_matches_package_license(readme : String, package_license : String) -> Bool

#
readme_mentions_license

fn readme_mentions_license(readme : String, expr : String) -> Bool

#
readme_mentions_license_safe

fn readme_mentions_license_safe(readme : String, expr : String) -> Bool

#
release_checklist

fn release_checklist(moon_mod : String, readme : String, paths : Array[String], sources : Array[String], policy : Policy) -> Array[ReleaseItem]

#
release_checklist_report

fn release_checklist_report(items : Array[ReleaseItem]) -> String

#
release_item

fn release_item(name : String, passed : Bool, detail : String) -> ReleaseItem

#
release_ready

fn release_ready(moon_mod : String, readme : String, paths : Array[String], sources : Array[String], policy : Policy) -> Bool

#
release_report

fn release_report(moon_mod : String, readme : String, paths : Array[String], sources : Array[String], policy : Policy) -> String

#
remediation_markdown

fn remediation_markdown(audit : ProjectAudit) -> String

#
remediation_report

fn remediation_report(audit : ProjectAudit) -> String

#
requirement_count

fn requirement_count(text : String) -> Int

#
requirement_texts

fn requirement_texts(text : String) -> Array[String]

#
requirements

fn requirements(expr : Expr) -> Array[Expr]

#
resolved_findings

fn resolved_findings(current : Array[AuditFinding], baseline : Array[AuditFinding]) -> Array[AuditFinding]

#
review_level

fn review_level(text : String) -> String

fn scan_copyright(path : String, source : String) -> SourceCopyright

#
scan_copyrights

fn scan_copyrights(paths : Array[String], sources : Array[String]) -> Array[SourceCopyright]

#
scan_report

fn scan_report(path : String, source : String) -> String

#
scan_source

fn scan_source(path : String, source : String) -> SourceLicense

#
scan_sources

fn scan_sources(paths : Array[String], sources : Array[String]) -> Array[SourceLicense]

#
scan_sources_report

fn scan_sources_report(paths : Array[String], sources : Array[String]) -> String

#
serialize_baseline

fn serialize_baseline(findings : Array[AuditFinding]) -> String

#
severity_for_error

fn severity_for_error(error : String) -> String

#
should_scan_path

fn should_scan_path(path : String) -> Bool

#
simplify_and

fn simplify_and(left : Expr, right : Expr) -> Expr

#
simplify_expr

fn simplify_expr(expr : Expr) -> Expr

#
simplify_or

fn simplify_or(left : Expr, right : Expr) -> Expr

#
simplify_text

fn simplify_text(text : String) -> String

fn source_copyright(path : String, entries : Array[String], found : Bool, valid : Bool, message : String) -> SourceCopyright

#
source_license

fn source_license(path : String, expression : String, found : Bool, valid : Bool, message : String) -> SourceLicense

#
spdx_expression_in_comment

fn spdx_expression_in_comment(line : String) -> String?

#
spdx_expressions_conflict

fn spdx_expressions_conflict(expressions : Array[String]) -> Bool

#
spdx_tag_value_in_comment

fn spdx_tag_value_in_comment(line : String, marker : String) -> String?

#
split_char

fn split_char(text : String, sep : Char) -> Array[String]

#
split_config_list

fn split_config_list(text : String) -> Array[String]

#
state

fn state(expr : Expr, index : Int) -> ParseState

#
state_error

fn state_error(message : String, index : Int) -> ParseState

#
strict_policy

fn strict_policy(allowed : Array[String]) -> Policy

#
strip_config_comment

fn strip_config_comment(line : String) -> String

#
strong_copyleft_obligations

fn strong_copyleft_obligations(id : String) -> Array[Obligation]

#
suggestion_suffix

fn suggestion_suffix(item : Diagnostic) -> String

#
suggestions_for_audit

fn suggestions_for_audit(audit : ProjectAudit) -> Array[FixSuggestion]

#
summary

fn summary(text : String) -> String

#
text_replace

fn text_replace(text : String, from : String, to : String) -> String

#
third_party_by_license

fn third_party_by_license(packages : Array[ThirdPartyPackage], license : String) -> Array[ThirdPartyPackage]

#
third_party_count_for_license

fn third_party_count_for_license(packages : Array[ThirdPartyPackage], license : String) -> Int

#
third_party_errors

fn third_party_errors(packages : Array[ThirdPartyPackage], policy : Policy) -> Array[String]

#
third_party_field

fn third_party_field(line : String) -> (String, String)?

#
third_party_invalid_licenses

fn third_party_invalid_licenses(packages : Array[ThirdPartyPackage]) -> Array[String]

#
third_party_license_summary

fn third_party_license_summary(packages : Array[ThirdPartyPackage]) -> String

#
third_party_licenses

fn third_party_licenses(packages : Array[ThirdPartyPackage]) -> Array[String]

#
third_party_manifest_errors

fn third_party_manifest_errors(text : String) -> Array[String]

#
third_party_manifest_valid

fn third_party_manifest_valid(text : String) -> Bool

#
third_party_markdown

fn third_party_markdown(packages : Array[ThirdPartyPackage], policy : Policy) -> String

#
third_party_names

fn third_party_names(packages : Array[ThirdPartyPackage]) -> Array[String]

#
third_party_needs_notice

fn third_party_needs_notice(item : ThirdPartyPackage) -> Bool

#
third_party_package

fn third_party_package(name : String, license : String, source : String, notice : Bool) -> ThirdPartyPackage

#
third_party_package_errors

fn third_party_package_errors(item : ThirdPartyPackage, policy : Policy) -> Array[String]

#
third_party_policy_passes

fn third_party_policy_passes(packages : Array[ThirdPartyPackage], policy : Policy) -> Bool

#
third_party_record_errors

fn third_party_record_errors(line : Int, name : String, license : String, source : String) -> Array[String]

#
third_party_release_ready

fn third_party_release_ready(packages : Array[ThirdPartyPackage], policy : Policy) -> Bool

#
third_party_release_report

fn third_party_release_report(packages : Array[ThirdPartyPackage], policy : Policy) -> String

#
third_party_report

fn third_party_report(packages : Array[ThirdPartyPackage], policy : Policy) -> String

#
third_party_risk_summary

fn third_party_risk_summary(packages : Array[ThirdPartyPackage]) -> String

#
third_party_sources_missing

fn third_party_sources_missing(packages : Array[ThirdPartyPackage]) -> Array[String]

#
third_party_without_notice

fn third_party_without_notice(packages : Array[ThirdPartyPackage]) -> Array[ThirdPartyPackage]

#
token_from_word

fn token_from_word(word : String, offset : Int) -> Token

#
tokenize

fn tokenize(text : String) -> Array[Token]

#
tokens_report

fn tokens_report(text : String) -> String

#
tree

fn tree(expr : Expr) -> String

#
trim_ascii

fn trim_ascii(text : String) -> String

#
trim_config_value

fn trim_config_value(value : String) -> String

#
unchanged_findings

fn unchanged_findings(current : Array[AuditFinding], baseline : Array[AuditFinding]) -> Array[AuditFinding]

#
unique_strings

fn unique_strings(values : Array[String]) -> Array[String]

#
unknown_exceptions

fn unknown_exceptions(text : String) -> Array[String]

#
unknown_licenses

fn unknown_licenses(text : String) -> Array[String]

#
upper_ascii

fn upper_ascii(text : String) -> String

#
validation_errors

fn validation_errors(text : String) -> Array[String]

#
validation_errors_expr

fn validation_errors_expr(expr : Expr) -> Array[String]

#
validation_report

fn validation_report(text : String) -> String

#
weak_copyleft_obligations

fn weak_copyleft_obligations(id : String) -> Array[Obligation]

#
with_exception

fn with_exception(id : String, exception : String) -> Expr

#
workspace_audit

fn workspace_audit(moon_mod : String, readme : String, paths : Array[String], sources : Array[String], policy : Policy) -> WorkspaceAudit

#
workspace_errors

fn workspace_errors(audit : WorkspaceAudit, policy : Policy) -> Array[String]

#
workspace_grade

fn workspace_grade(audit : WorkspaceAudit, policy : Policy) -> String

#
workspace_report

fn workspace_report(audit : WorkspaceAudit, policy : Policy) -> String

#
workspace_score

fn workspace_score(audit : WorkspaceAudit, policy : Policy) -> Int

#
workspace_warnings

fn workspace_warnings(audit : WorkspaceAudit) -> Array[String]

#
wrap_if

fn wrap_if(cond : Bool, text : String) -> String