import { VarType } from '../../types' import type { OutputVar } from './types' import { CodeLanguage } from './types' export const extractFunctionParams = (code: string, language: CodeLanguage) => { if (language === CodeLanguage.json) return [] const patterns: Record, RegExp> = { [CodeLanguage.python3]: /def\s+main\s*\((.*?)\)/, [CodeLanguage.javascript]: /function\s+main\s*\((.*?)\)/, } const match = code.match(patterns[language]) const params: string[] = [] if (match?.[1]) { params.push(...match[1].split(',') .map(p => p.trim()) .filter(Boolean) .map(p => p.split(':')[0].trim()), ) } return params } export const extractReturnType = (code: string, language: CodeLanguage): OutputVar => { const codeWithoutComments = code.replace(/\/\*\*[\s\S]*?\*\//, '') console.log(codeWithoutComments) const returnIndex = codeWithoutComments.indexOf('return') if (returnIndex === -1) return {} // returnから始まる部分文字列を取得 const codeAfterReturn = codeWithoutComments.slice(returnIndex) let bracketCount = 0 let startIndex = codeAfterReturn.indexOf('{') if (language === CodeLanguage.javascript && startIndex === -1) { const parenStart = codeAfterReturn.indexOf('(') if (parenStart !== -1) startIndex = codeAfterReturn.indexOf('{', parenStart) } if (startIndex === -1) return {} let endIndex = -1 for (let i = startIndex; i < codeAfterReturn.length; i++) { if (codeAfterReturn[i] === '{') bracketCount++ if (codeAfterReturn[i] === '}') { bracketCount-- if (bracketCount === 0) { endIndex = i + 1 break } } } if (endIndex === -1) return {} const returnContent = codeAfterReturn.slice(startIndex + 1, endIndex - 1) console.log(returnContent) const result: OutputVar = {} const keyRegex = /['"]?(\w+)['"]?\s*:(?![^{]*})/g const matches = returnContent.matchAll(keyRegex) for (const match of matches) { console.log(`Found key: "${match[1]}" from match: "${match[0]}"`) const key = match[1] result[key] = { type: VarType.string, children: null, } } console.log(result) return result }