npm.io
0.1.0 • Published 2d ago

@birdcc/linter

Licence
GPL-3.0-only
Version
0.1.0
Deps
2
Size
193 kB
Vulns
0
Weekly
0
Stars
10

Alpha Stage: This package is in early development. APIs may change frequently, and unexpected issues may occur. Please evaluate carefully before deploying in production environments.

npm version License: GPL-3.0 TypeScript

Overview · Features · Installation · Usage · Rules · API Reference

Overview

@birdcc/linter is the rule engine layer of the BIRD-LSP toolchain, providing a pluggable lint rule system for checking protocol compliance, security, and performance issues in BIRD2 configuration files.


Features

  • Pluggable Rules — Flexible rule system based on the BirdRule type
  • Protocol Rules — BGP/OSPF configuration completeness checks
  • Security Rules — Configuration security best practices
  • Performance Rules — Performance optimization recommendations
  • 32+ Built-in Rules — Comprehensive coverage of common issues

Installation

# Using pnpm (recommended)
pnpm add @birdcc/linter

# Using npm
npm install @birdcc/linter

# Using yarn
yarn add @birdcc/linter

Usage

Basic Linting
import { lintBirdConfig } from "@birdcc/linter";

const config = `
protocol bgp example {
  neighbor 192.168.1.1 as 65001;
}
`;

const result = lintBirdConfig(config);

console.log(result.diagnostics);
// [{ code: "bgp/missing-local-as", message: "BGP protocol missing local as configuration", severity: "warning" }]
Reference Samples Sync
pnpm --filter @birdcc/linter sync:examples

This command copies refer/vscode-bird2/syntaxes/bird-tm-grammar/sample/*.conf to packages/@birdcc/linter/examples/ and runs automatically during build and test.

Custom Rules
import type { BirdRule, BirdDiagnostic } from "@birdcc/linter";

const namingConventionRule: BirdRule = ({ core }) => {
  const diagnostics: BirdDiagnostic[] = [];

  for (const symbol of core.symbols) {
    if (symbol.kind === "protocol") {
      if (!/^[a-z][a-z0-9-]*$/.test(symbol.name)) {
        diagnostics.push({
          code: "structure/invalid-protocol-name",
          message: `Protocol name '${symbol.name}' should only contain lowercase letters, numbers, and hyphens`,
          severity: "warning",
          source: "linter",
          range: {
            /* ... */
          },
        });
      }
    }
  }

  return diagnostics;
};

Rules

Symbol Rules (sym/*)
Rule Description Level
sym/undefined Reference to undefined symbol error
sym/duplicate Duplicate symbol definition error
sym/proto-type-mismatch Protocol type mismatch error
Config Rules (cfg/*)
Rule Description Level
cfg/no-protocol No protocol defined error
cfg/missing-router-id Missing router id error
cfg/syntax-error Syntax error detected error
cfg/value-out-of-range Value out of valid range error
Network Rules (net/*)
Rule Description Level
net/invalid-prefix-length Invalid prefix length error
net/invalid-ipv4-prefix Invalid IPv4 prefix error
net/invalid-ipv6-prefix Invalid IPv6 prefix error
Type Rules (type/*)
Rule Description Level
type/mismatch Type mismatch error
type/not-iterable Non-iterable in loop error
BGP Rules (bgp/*)
Rule Description Level
bgp/missing-local-as Missing local AS warning
bgp/missing-neighbor Missing neighbor warning
bgp/missing-remote-as Missing remote AS warning
bgp/as-mismatch AS number mismatch warning
OSPF Rules (ospf/*)
Rule Description Level
ospf/missing-area Missing area configuration warning
ospf/backbone-stub Stub area on backbone warning

API Reference

lintBirdConfig(text: string, options?): LintResult

Perform complete lint checks (semantic analysis + rule checks).

import { lintBirdConfig } from "@birdcc/linter";

const result = lintBirdConfig(birdConfigText);
// result.parsed      → Parsed AST
// result.core        → Semantic analysis snapshot
// result.diagnostics → All diagnostic messages
Types
interface LintResult {
  parsed: ParsedBirdDocument;
  core: CoreSnapshot;
  diagnostics: BirdDiagnostic[];
}

type BirdRule = (context: RuleContext) => BirdDiagnostic[];

interface RuleContext {
  text: string;
  parsed: ParsedBirdDocument;
  core: CoreSnapshot;
}

Package Description
@birdcc/parser Tree-sitter grammar and parser
@birdcc/core Semantic analysis engine
@birdcc/formatter Code formatting engine
@birdcc/lsp LSP server implementation
@birdcc/cli Command-line interface

Documentation

License

This project is licensed under the GPL-3.0 License.


Built with by the BIRD Chinese Community (BIRDCC)

GitHub · Marketplace · Report Issues