API Reference

Function signatures, data types, and JSON output schemas for the Nimcheck library.

Core Functions

All functions are exported from nimcheck.nim. Import once with import nimcheck.

Validation

Function Signature Returns Description
validateSource (source: string, flavor: LanguageFlavor = lfUnknown, options: ValidationOptions = newValidationOptions(), sourcePath: string = "") ValidationResult Validate source code string. Auto-detects flavor if lfUnknown.
validateFile (filePath: string, flavor: LanguageFlavor = lfUnknown, options: ValidationOptions = newValidationOptions()) ValidationResult Validate a file from disk. Auto-detects flavor from file extension.
validateSourceJson (source: string, flavor: LanguageFlavor = lfUnknown) string Validate and return pretty-printed JSON string.
validateFileJson (filePath: string, flavor: LanguageFlavor = lfUnknown) string Validate file and return pretty-printed JSON string.

Inspection

Function Signature Returns Description
inspectSource (source: string, flavor: LanguageFlavor = lfUnknown, options: ValidationOptions = newValidationOptions(), sourcePath: string = "") JsonNode Validate and return structural diagnostics (functions, classes, imports).
inspectFile (filePath: string, flavor: LanguageFlavor = lfUnknown, options: ValidationOptions = newValidationOptions()) JsonNode Inspect a file and return structural diagnostics.

Reporting

Function Signature Returns Description
reportSource (source: string, flavor: LanguageFlavor = lfUnknown) string Human-readable validation report for source code.
reportFile (filePath: string, flavor: LanguageFlavor = lfUnknown) string Human-readable validation report for a file.

Detection and Utility

Function Signature Returns Description
detectFlavor (source: string, filePath: string = "") LanguageFlavor Auto-detect language flavor (convenience wrapper).
supportedFlavors () seq[string] List all registered language flavors sorted alphabetically.
version () string Version string ("0.1.0").
enableDebug () void Enable debug mode globally.
disableDebug () void Disable debug mode globally.

Core Detector (lower-level)

Function Signature Returns Description
detectFlavor (core) (source: string, filePath: string = "", explicitFlavor: LanguageFlavor = lfUnknown) (LanguageFlavor, FlavorDetectionMethod, float) Full detection with confidence score.

Factory

Function Signature Returns Description
createValidator (flavor: LanguageFlavor, source: string, options: ValidationOptions, sourcePath: string) ValidatorBase Factory: create the correct validator for a flavor.
registerValidator (flavor: string, constructor: ValidatorConstructor) void Register a new validator constructor.

Data Types

LanguageFlavor (enum, pure)

All 28 flavors in src/nimcheck/core/types.nim have dedicated validators (v0.1.0). Registry aliases (e.g. py, js, md) map to the same validators — see supportedFlavors() or bin/nimcheck help.

Enum Value String Validator module File Extensions (auto-detect)
lfUnknown "unknown" -- --
lfNim "nim" nim_validator.nim .nim, .nims, .nimble
lfPython "python" python_validator.nim .py, .pyw, .pyx, .pxd
lfBash "bash" bash_validator.nim .sh, .bash
lfShell "shell" bash_validator.nim (shared) .zsh, .fish
lfJavaScript "javascript" javascript_validator.nim .js, .mjs, .cjs
lfTypeScript "typescript" type_xml_validator.nim .ts, .tsx
lfPHP "php" php_validator.nim .php, .phtml
lfHTML "html" html_validator.nim .html, .htm, .xhtml
lfXML "xml" type_xml_validator.nim .xml, .xsd, .xslt, .svg
lfJinja "jinja" jinja_validator.nim .jinja, .jinja2, .j2
lfJSON "json" config_validators.nim .json, .jsonc
lfYAML "yaml" config_validators.nim .yaml, .yml
lfTOML "toml" config_validators.nim .toml
lfCSS "css" extended_validators.nim .css
lfSQL "sql" extended_validators.nim .sql
lfMarkdown "markdown" extended_validators.nim .md, .markdown
lfDockerfile "dockerfile" extended_validators.nim Dockerfile
lfMakefile "makefile" extended_validators.nim Makefile, makefile
lfRuby "ruby" extended_validators.nim .rb
lfRust "rust" extended_validators.nim .rs
lfGo "go" extended_validators.nim .go
lfLua "lua" lang_validators.nim .lua
lfC "c" cfamily_validators.nim .c, .h
lfCpp "cpp" cfamily_validators.nim .cpp, .cxx, .hpp
lfCSharp "csharp" cfamily_validators.nim .cs
lfJava "java" cfamily_validators.nim .java
lfSwift "swift" lang_validators.nim .swift
lfKotlin "kotlin" lang_validators.nim .kt, .kts

FlavorDetectionMethod (enum)

Value Meaning
fdmExplicit User explicitly provided the flavor
fdmExtension Detected from file extension
fdmShebang Detected from #! shebang line
fdmContent Detected via content keyword analysis
fdmUnknown Could not determine

TokenKind (enum)

Lexical token classifications used by all tokenizers.

Kind Description
tkWhitespace Spaces, tabs, carriage returns
tkNewline \n
tkComment Line (#, //) or block (/* */) comment
tkDocComment Documentation comment (##, ///, """)
tkString Single or double quoted string literal
tkRawString Raw string (r"...")
tkMultilineString Triple-quoted string ("""...""")
tkNumber Integer, float, hex, octal, binary
tkIdentifier Variable, function, type name
tkKeyword Language-specific reserved word
tkOperator +, -, *, /, &&, etc.
tkAssignment =, :=, +=, etc.
tkPunctuation ., ,, ;, :
kOpenParen (
kCloseParen )
kOpenBracket [
kCloseBracket ]
kOpenBrace {
kCloseBrace }
kAngleOpen <
kAngleClose >
tkInterpolation String interpolation (${var}, f-string {expr})
tkDirective Preprocessor / compiler directive (#include, shebang)
tkTemplateTag Template language tag ({{ }}, {% %})
tkSpecial Language-specific special token
tkError Malformed or unrecognizable character
tkEndOfFile End of input marker

Token

Token = object
  kind: TokenKind
  value: string
  position: SourcePosition
  range: SourceRange

SourcePosition

SourcePosition = object
  line: int      # 1-indexed line number
  column: int    # 1-indexed column number
  offset: int    # 0-indexed byte offset from start

SourceRange

SourceRange = object
  startPos: SourcePosition
  endPos: SourcePosition

ErrorSeverity (enum)

Value String Description
esInfo "info" Informational note
esWarning "warning" Non-fatal issue
esError "error" Validation failure
esCritical "critical" Internal framework failure

ValidationError

ValidationError = object
  severity: ErrorSeverity
  message: string
  code: string           # Error code, e.g. "E0002"
  position: SourcePosition
  range: SourceRange
  context: string        # Surrounding source context (optional)
  hint: string           # Fix suggestion (optional)

ValidationResult

ValidationResult = object
  valid: bool
  flavor: LanguageFlavor
  detectionMethod: FlavorDetectionMethod
  errors: seq[ValidationError]
  warnings: int
  infos: int
  moduleInfo: ModuleInfo
  durationMs: float
  debugOutput: string     # Empty unless compiled with -d:nimcheckDebug

ValidationOptions

ValidationOptions = object
  flavor: LanguageFlavor        # lfUnknown = auto-detect (default)
  debugMode: bool               # Enable per-validation debug logging (default: false)
  strictMode: bool              # Warnings become errors (default: false)
  maxErrors: int                # Stop after N errors; 0 = unlimited (default: 0)
  includeContext: bool          # Include surrounding source lines in error output (default: true)
  includeHints: bool            # Include fix suggestions (default: true)

Structural Types (populated by analyzeTokens())

VariableInfo = object
  name: string
  kind: string             # "var", "let", "const", "global", "local"
  typeAnnotation: string
  defaultValue: string
  position: SourcePosition
  mutable: bool
  exported: bool

FunctionInfo = object
  name: string
  kind: string             # "function", "method", "proc", "func", "lambda"
  parameters: seq[ParameterInfo]
  returnType: string
  isAsync: bool
  isExported: bool
  isGenerator: bool
  visibility: string       # "public", "private", "protected"
  position: SourcePosition
  docComment: string

ParameterInfo = object
  name: string
  typeAnnotation: string
  defaultValue: string
  isOptional: bool
  isVarargs: bool

ClassInfo = object
  name: string
  kind: string             # "class", "object", "struct", "interface"
  baseTypes: seq[string]
  fields: seq[VariableInfo]
  methods: seq[FunctionInfo]
  generics: seq[string]
  visibility: string
  position: SourcePosition
  docComment: string

ImportInfo = object
  module: string
  symbols: seq[string]     # Specific imported symbols
  isRelative: bool
  alias: string
  position: SourcePosition

ModuleInfo = object
  flavor: LanguageFlavor
  detectionMethod: FlavorDetectionMethod
  imports: seq[ImportInfo]
  variables: seq[VariableInfo]
  functions: seq[FunctionInfo]
  classes: seq[ClassInfo]
  linesOfCode: int
  totalTokens: int
  comments: int
  debugInfo: JsonNode      # Language-specific extra info

JSON Output Structures

Every type has a .toJson() method. The ValidationResult.toJson() aggregates all nested structures.

ValidationResult JSON

{
  "valid": true,
  "flavor": "python",
  "detectionMethod": "by_extension",
  "errors": [
    {
      "severity": "error",
      "message": "Unclosed string literal starting with '\"'",
      "code": "E0002",
      "position": {"line": 2, "column": 13, "offset": 42},
      "range": {
        "start": {"line": 2, "column": 13, "offset": 42},
        "end":   {"line": 2, "column": 13, "offset": 42}
      },
      "context": "",
      "hint": "Add a closing quote before end of file"
    }
  ],
  "warnings": 0,
  "infos": 0,
  "moduleInfo": {
    "flavor": "python",
    "detectionMethod": "by_extension",
    "imports": [],
    "variables": [],
    "functions": [
      {
        "name": "hello",
        "kind": "def",
        "parameters": [],
        "returnType": "",
        "isAsync": false,
        "isExported": false,
        "isGenerator": false,
        "visibility": "",
        "position": {"line": 1, "column": 5, "offset": 4},
        "docComment": ""
      }
    ],
    "classes": [],
    "linesOfCode": 3,
    "totalTokens": 12,
    "comments": 0,
    "debugInfo": null
  },
  "durationMs": 0.342,
  "debugOutput": ""
}

ValidationError JSON

{
  "severity": "error",
  "message": "Unclosed string literal starting with '\"'",
  "code": "E0002",
  "position": {"line": 2, "column": 13, "offset": 42},
  "range": {
    "start": {"line": 2, "column": 13, "offset": 42},
    "end":   {"line": 2, "column": 13, "offset": 42}
  },
  "context": "",
  "hint": "Add a closing quote before end of file"
}

ModuleInfo JSON

{
  "flavor": "nim",
  "detectionMethod": "by_extension",
  "imports": [
    {
      "module": "strutils",
      "symbols": [],
      "isRelative": false,
      "alias": "",
      "position": {"line": 1, "column": 8, "offset": 7}
    }
  ],
  "variables": [],
  "functions": [
    {
      "name": "add",
      "kind": "proc",
      "parameters": [],
      "returnType": "",
      "isAsync": false,
      "isExported": false,
      "isGenerator": false,
      "visibility": "",
      "position": {"line": 3, "column": 6, "offset": 28},
      "docComment": ""
    }
  ],
  "classes": [
    {
      "name": "MyType",
      "kind": "type",
      "baseTypes": [],
      "fields": [],
      "methods": [],
      "generics": [],
      "visibility": "",
      "position": {"line": 5, "column": 6, "offset": 52},
      "docComment": ""
    }
  ],
  "linesOfCode": 8,
  "totalTokens": 45,
  "comments": 2,
  "debugInfo": null
}

Human-Readable Report Format

=== Validation Report ===
  Flavor: python
  Detection: by_extension
  Valid: false
  Errors: 1
  Warnings: 0
  Duration: 0.34ms
  Lines of code: 3
  Tokens: 12

  --- Findings ---
  [E0002] (error) L2:13: Unclosed string literal starting with '"'
         |     x = "
         |            ^
         hint: Add a closing quote before end of file

  --- Summary ---
  INVALID - source has issues that need attention.

Error Formatter Output (single error)

  [E0002] (error) L2:13: Unclosed string literal starting with '"'
         |     x = "
         |            ^
         hint: Add a closing quote before end of file

CLI Usage

Nimcheck v0.1.0 - Universal Source Code Validation Framework

Usage:
  nimcheck validate [--file=<path> | --source=<code>] [--flavor=<lang>]
  nimcheck inspect  [--file=<path> | --source=<code>] [--flavor=<lang>]
  nimcheck detect   [--file=<path> | --source=<code>]
  nimcheck help

Options:
  --file=<path>     Source file to process
  --source=<code>   Source code string to process
  --flavor=<lang>   Language flavor (auto-detect if omitted)
  --debug           Enable debug mode
  --json            Output as JSON (default for inspect)

Run bin/nimcheck help for the current registered flavor list.

The validate command exits 0 at the process level; inspect valid in the output or JSON for pass/fail. Validation paths do not raise to the caller.