UNPKG

@blast-shield/parser

Version:
102 lines (76 loc) 3.32 kB
# 📋 @blast-shield/parser > Parser utility for Blast Shield. Provides file parsing, comment extraction, language detection, and language config helpers with no technical debt logic. <!-- Package Info --> [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![npm version](https://img.shields.io/npm/v/%40blast-shield%2Fparser)](https://www.npmjs.com/package/@blast-shield/parser) <!-- Tech Stack --> [![ESM Ready](https://img.shields.io/badge/ESM-Ready-green)]() [![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?logo=typescript&logoColor=white)](https://www.typescriptlang.org/) ## Features - Parse files for comments and language - Extract comments from code in multiple languages - Find files respecting .gitignore and custom ignore patterns - Unified language config for both regex and string-based comment detection - Language config helpers for heuristics, UI, and fallback logic ## Usage ```ts import { parseFileForComments, findFilesWithGitignore, extractComments, getLanguageFromFilePath, LANGUAGE_CONFIGS, getLanguageConfigForFile, isComment, isBlockCommentStart, isBlockCommentEnd, isInBlockComment } from '@blast-shield/parser'; // Find files const files = await findFilesWithGitignore(['src/**/*.ts'], { rootDir: process.cwd(), additionalIgnores: ['dist/**'] }); // Parse a file for comments const result = await parseFileForComments(files[0]); console.log(result.comments, result.language, result.linesOfCode); // Use language config helpers const langConfig = getLanguageConfigForFile('foo.ts'); if (langConfig) { console.log(isComment('// TODO: refactor', langConfig)); // true } ``` ## API ### parseFileForComments(filePath: string) Returns `{ filePath, comments, language, linesOfCode }` for a given file. ### findFilesWithGitignore(patterns, options) Find files matching glob patterns, respecting .gitignore and additional ignore patterns. - `patterns`: string or string[] - `options`: `{ rootDir?: string, additionalIgnores?: string[] }` ### extractComments(code: string, language: string) Extracts all comments from code for a given language (using regex-based config). ### getLanguageFromFilePath(filePath: string) Detects the language from a file path. ### LANGUAGE_CONFIGS Unified array of language configs, each with: - `name`: string - `extensions`: string[] - `lineComments`: `{ regex: RegExp, marker: string }[]` - `blockComments`: `{ start: { regex, marker }, end: { regex, marker } }[]` ### getLanguageConfigForFile(filePath: string) Returns the language config for a file, or null if unsupported. ### isComment(line: string, config: LanguageConfig) Returns true if the line is a comment (single-line or block) for the given language config. ### isBlockCommentStart(line: string, config: LanguageConfig) Returns true if the line starts a block comment. ### isBlockCommentEnd(line: string, config: LanguageConfig) Returns true if the line ends a block comment. ### isInBlockComment(line: string, config: LanguageConfig) Returns true if the line is inside a block comment. ## Logging Uses the `logger` package for warnings and errors. ## Development ```sh pnpm build # Build the package pnpm test # Run tests pnpm lint # Run Biome linter ``` ## License MIT