provenant/parsers/metadata.rs
1// SPDX-FileCopyrightText: Provenant contributors
2// SPDX-License-Identifier: Apache-2.0
3
4/// Parser metadata for auto-generating documentation.
5///
6/// This module provides infrastructure for registering parser metadata
7/// that is used to automatically generate `docs/SUPPORTED_FORMATS.md`.
8///
9/// Fields are used by `bin/generate_supported_formats.rs` but not in library code,
10/// so we allow dead_code warnings for library builds.
11#[derive(Debug, Clone)]
12#[allow(dead_code)]
13pub struct ParserMetadata {
14 /// Human-readable description (e.g., "npm package.json manifest")
15 pub description: &'static str,
16 /// File patterns this parser matches (e.g., ["**/package.json"])
17 pub file_patterns: &'static [&'static str],
18 /// Package type identifier (e.g., "npm", "pypi", "maven")
19 pub package_type: &'static str,
20 /// Primary programming language (e.g., "JavaScript", "Python")
21 pub primary_language: &'static str,
22 /// Optional documentation URL
23 pub documentation_url: Option<&'static str>,
24}
25
26inventory::collect!(ParserMetadata);
27
28/// Registers parser metadata for documentation generation.
29///
30/// # Example
31///
32/// ```no_run
33/// use provenant::register_parser;
34///
35/// register_parser!(
36/// "npm package.json manifest",
37/// &["**/package.json"],
38/// "npm",
39/// "JavaScript",
40/// Some("https://docs.npmjs.com/cli/v10/configuring-npm/package-json"),
41/// );
42/// ```
43#[macro_export]
44macro_rules! register_parser {
45 ($description:expr, $patterns:expr, $package_type:expr, $language:expr, $docs_url:expr $(,)?) => {
46 inventory::submit! {
47 $crate::parsers::metadata::ParserMetadata {
48 description: $description,
49 file_patterns: $patterns,
50 package_type: $package_type,
51 primary_language: $language,
52 documentation_url: $docs_url,
53 }
54 }
55 };
56}