mcp-ai-agent-guidelines
Version:
A comprehensive Model Context Protocol server providing advanced tools, resources, and prompts for implementing AI agent best practices
75 lines • 2.79 kB
JavaScript
/**
* Lua Parser (rockspec)
*/
import { BaseParser } from "./base.js";
export class LuaRockspecParser extends BaseParser {
parse(content) {
const packages = [];
const errors = [];
let projectName;
let projectVersion;
try {
const packageMatch = content.match(/package\s*=\s*["']([^"']+)["']/);
const versionMatch = content.match(/version\s*=\s*["']([^"']+)["']/);
if (packageMatch)
projectName = packageMatch[1];
if (versionMatch)
projectVersion = versionMatch[1];
const depsMatch = content.match(/dependencies\s*=\s*\{([\s\S]*?)\}/);
if (depsMatch) {
const depMatches = depsMatch[1].matchAll(/["']([^"']+)["']/g);
for (const match of depMatches) {
const parsed = this.parseLuaDependency(match[1]);
if (parsed)
packages.push(parsed);
}
}
}
catch (error) {
errors.push(`Error parsing rockspec: ${error instanceof Error ? error.message : "Unknown error"}`);
}
return {
packages,
projectName,
projectVersion,
ecosystem: "lua",
fileType: "rockspec",
errors: errors.length > 0 ? errors : undefined,
};
}
parseLuaDependency(spec) {
const match = spec.match(/^([a-zA-Z0-9_-]+)\s*(.*)$/);
if (!match)
return null;
return {
name: match[1],
version: match[2]?.trim() || "*",
type: "dependencies",
ecosystem: "lua",
};
}
canParse(content) {
if (content.includes("rockspec_format"))
return true;
const hasLuaPackage = /package\s*=\s*["'][^"']+["']/.test(content);
const hasLuaVersion = /version\s*=\s*["'][\d.]+-\d+["']/.test(content);
return hasLuaPackage && (hasLuaVersion || content.includes("source = {"));
}
getEcosystem() {
return "lua";
}
getFileTypes() {
return ["rockspec"];
}
analyzePackage(pkg, options, issues) {
if (options.checkOutdated && (pkg.version === "*" || !pkg.version)) {
this.addIssue(issues, pkg, "Unpinned Version", "moderate", "No version constraint specified", "Use specific version constraints for production");
}
}
addEcosystemRecommendations(recommendations) {
recommendations.push("Run 'luarocks list --outdated' to check for updates");
recommendations.push("Use specific version constraints for production");
recommendations.push("Consider using luarocks-admin for private rocks");
}
}
//# sourceMappingURL=lua.js.map