UNPKG

@thugdacake/operante

Version:

Cérebro Operante — o núcleo IA que invade e domina assistentes, criando uma mente única com Thug Developer

87 lines (75 loc) 2.32 kB
import { Plugin, ValidationResult } from '../types'; import { ESLint } from 'eslint'; import { exec } from 'child_process'; import { promisify } from 'util'; const execAsync = promisify(exec); const plugin: Plugin = { name: 'lint', version: '1.0.0', async validate(path: string): Promise<ValidationResult> { const errors = []; const warnings = []; let files = 0; let lines = 0; try { // Lint JavaScript/TypeScript const eslint = new ESLint(); const results = await eslint.lintFiles([path]); for (const result of results) { files++; lines += result.source.split('\n').length; for (const message of result.messages) { const issue = { file: result.filePath, line: message.line, message: message.message, severity: message.severity === 2 ? 'error' : 'warning' }; if (issue.severity === 'error') { errors.push(issue); } else { warnings.push(issue); } } } // Lint Lua (se houver) try { const { stdout } = await execAsync(`luacheck ${path}`); const luacheckResults = stdout.split('\n'); for (const line of luacheckResults) { if (line.includes(':')) { const [file, lineNum, message] = line.split(':'); files++; lines++; const issue = { file, line: parseInt(lineNum), message: message.trim(), severity: message.includes('error') ? 'error' : 'warning' }; if (issue.severity === 'error') { errors.push(issue); } else { warnings.push(issue); } } } } catch (error) { // Ignora erro se luacheck não estiver instalado } return { success: errors.length === 0, errors, warnings, metrics: { files, lines, issues: errors.length + warnings.length } }; } catch (error) { throw new Error(`Erro ao executar lint: ${error.message}`); } } }; export default plugin;