chore: import upstream snapshot with attribution
Check Markdown links / linkChecker (push) Has been cancelled
Check Markdown links / linkChecker (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
import {
|
||||
HookEventType,
|
||||
PluginContext,
|
||||
PluginHandler,
|
||||
PluginParameters,
|
||||
} from '../types';
|
||||
import { getText } from '../utils';
|
||||
|
||||
export const handler: PluginHandler = async (
|
||||
context: PluginContext,
|
||||
parameters: PluginParameters,
|
||||
eventType: HookEventType
|
||||
) => {
|
||||
let error = null;
|
||||
let verdict = false;
|
||||
let data: any = null;
|
||||
|
||||
const languageMap: { [key: string]: string } = {
|
||||
sql: 'SQL',
|
||||
py: 'Python',
|
||||
python: 'Python',
|
||||
gyp: 'Python',
|
||||
ts: 'TypeScript',
|
||||
tsx: 'TypeScript',
|
||||
typescript: 'TypeScript',
|
||||
js: 'JavaScript',
|
||||
jsx: 'JavaScript',
|
||||
javascript: 'JavaScript',
|
||||
java: 'Java',
|
||||
cs: 'C#',
|
||||
cpp: 'C++',
|
||||
c: 'C',
|
||||
rb: 'Ruby',
|
||||
php: 'PHP',
|
||||
swift: 'Swift',
|
||||
kt: 'Kotlin',
|
||||
go: 'Go',
|
||||
rs: 'Rust',
|
||||
scala: 'Scala',
|
||||
r: 'R',
|
||||
pl: 'Perl',
|
||||
sh: 'Shell',
|
||||
html: 'HTML',
|
||||
css: 'CSS',
|
||||
xml: 'XML',
|
||||
json: 'JSON',
|
||||
yml: 'YAML',
|
||||
md: 'Markdown',
|
||||
dockerfile: 'Dockerfile',
|
||||
// Add more mappings as needed
|
||||
};
|
||||
|
||||
try {
|
||||
const format = parameters.format;
|
||||
const not = parameters.not || false;
|
||||
if (!format) {
|
||||
throw new Error('Missing required parameter: format');
|
||||
}
|
||||
|
||||
let responseText = getText(context, eventType);
|
||||
if (!responseText) {
|
||||
throw new Error('No text content to analyze');
|
||||
}
|
||||
|
||||
const codeBlockRegex = /```(\w+)\n[\s\S]*?\n```/g;
|
||||
let matches = Array.from(responseText.matchAll(codeBlockRegex));
|
||||
|
||||
if (matches.length === 0) {
|
||||
data = {
|
||||
explanation: 'No code blocks found in the text',
|
||||
searchedFormat: format,
|
||||
not,
|
||||
foundFormats: [],
|
||||
textExcerpt:
|
||||
responseText.length > 100
|
||||
? responseText.slice(0, 100) + '...'
|
||||
: responseText,
|
||||
};
|
||||
verdict = not;
|
||||
return { error, verdict, data };
|
||||
}
|
||||
|
||||
const foundLanguages = matches.map((match) => {
|
||||
const markdownLanguage = match[1].toLowerCase();
|
||||
return languageMap[markdownLanguage] || markdownLanguage;
|
||||
});
|
||||
|
||||
const hasFormat = foundLanguages.some((lang) => lang === format);
|
||||
verdict = not ? !hasFormat : hasFormat;
|
||||
|
||||
data = {
|
||||
explanation: verdict
|
||||
? not
|
||||
? `No code blocks in ${format} format found as expected`
|
||||
: `Found code block(s) in ${format} format`
|
||||
: not
|
||||
? `Found code block(s) in ${format} format when none were expected`
|
||||
: `No code blocks in ${format} format found`,
|
||||
searchedFormat: format,
|
||||
not,
|
||||
foundFormats: foundLanguages,
|
||||
textExcerpt:
|
||||
responseText.length > 100
|
||||
? responseText.slice(0, 100) + '...'
|
||||
: responseText,
|
||||
};
|
||||
} catch (e: any) {
|
||||
error = e;
|
||||
let textExcerpt = getText(context, eventType);
|
||||
textExcerpt =
|
||||
textExcerpt?.length > 100
|
||||
? textExcerpt.slice(0, 100) + '...'
|
||||
: textExcerpt;
|
||||
|
||||
data = {
|
||||
explanation: `Error while checking for code blocks: ${e.message}`,
|
||||
searchedFormat: parameters.format,
|
||||
not: parameters.not || false,
|
||||
textExcerpt: textExcerpt || 'No text available',
|
||||
};
|
||||
}
|
||||
|
||||
return { error, verdict, data };
|
||||
};
|
||||
Reference in New Issue
Block a user