Skip to main content

provenant/parsers/
metadata.rs

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