find_all_pattern
Locate all code nodes matching a specified pattern for comprehensive analysis, auditing, or review tasks in JavaScript/TypeScript codebases.
Instructions
Find all nodes matching the specified pattern. Use for comprehensive analysis when you need all matches.
Examples: • Audit all functions: find_all_pattern('function') • Find all TODO comments: find_all_pattern('comment[text*="TODO"]') • Security audit: find_all_pattern('call[text*="eval"]') • Performance review: find_all_pattern('call[text*="console.log"]') to find debug logs • API usage: find_all_pattern('call[text*="fetch"]') to find all API calls • React hooks: find_all_pattern('call[text*="use"]') for hooks usage • Error patterns: find_all_pattern('string[text*="error"]') for error messages • Database queries: find_all_pattern('string[text*="SELECT"]') for SQL • Event handlers: find_all_pattern('function[text*="onClick"]')
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | Pattern to match: 'function', 'call[text*="console.log"]', 'string[text*="TODO"]' | |
| limit | No | Maximum number of matches to return (default: no limit). Use for large codebases. |
Implementation Reference
- src/index.ts:569-607 (handler)The handler function that implements the core logic of the 'find_all_pattern' tool. It searches the current AST for all nodes matching the given pattern using tree-hugger-js's findAll method, applies an optional limit, formats the results, and returns them.private async findAllPattern(args: { pattern: string; limit?: number }) { if (!this.currentAST) { return { content: [{ type: "text", text: "No AST loaded. Please use parse_code first.", }], isError: true, }; } try { const results = this.currentAST.tree.findAll(args.pattern); const limitedResults = args.limit ? results.slice(0, args.limit) : results; const matches = limitedResults.map((node: NodeWrapper) => ({ type: node.type, text: node.text.length > 100 ? node.text.slice(0, 100) + '...' : node.text, line: node.line, column: node.column, name: node.name, })); return { content: [{ type: "text", text: `Found ${results.length} matches for pattern "${args.pattern}"${args.limit ? ` (showing first ${limitedResults.length})` : ''}:\n${JSON.stringify(matches, null, 2)}`, }], }; } catch (error) { return { content: [{ type: "text", text: `Error finding pattern: ${error instanceof Error ? error.message : String(error)}`, }], isError: true, }; } }
- src/index.ts:219-232 (schema)The input schema definition for the 'find_all_pattern' tool, specifying the required 'pattern' string and optional 'limit' number.inputSchema: { type: "object", properties: { pattern: { type: "string", description: "Pattern to match: 'function', 'call[text*=\"console.log\"]', 'string[text*=\"TODO\"]'" }, limit: { type: "number", description: "Maximum number of matches to return (default: no limit). Use for large codebases." } }, required: ["pattern"], },
- src/index.ts:216-233 (registration)The tool registration in the ListToolsRequestSchema handler's tools array, including name, description, and input schema.{ name: "find_all_pattern", description: "Find all nodes matching the specified pattern. Use for comprehensive analysis when you need all matches.\n\nExamples:\n• Audit all functions: find_all_pattern('function')\n• Find all TODO comments: find_all_pattern('comment[text*=\"TODO\"]')\n• Security audit: find_all_pattern('call[text*=\"eval\"]')\n• Performance review: find_all_pattern('call[text*=\"console.log\"]') to find debug logs\n• API usage: find_all_pattern('call[text*=\"fetch\"]') to find all API calls\n• React hooks: find_all_pattern('call[text*=\"use\"]') for hooks usage\n• Error patterns: find_all_pattern('string[text*=\"error\"]') for error messages\n• Database queries: find_all_pattern('string[text*=\"SELECT\"]') for SQL\n• Event handlers: find_all_pattern('function[text*=\"onClick\"]')", inputSchema: { type: "object", properties: { pattern: { type: "string", description: "Pattern to match: 'function', 'call[text*=\"console.log\"]', 'string[text*=\"TODO\"]'" }, limit: { type: "number", description: "Maximum number of matches to return (default: no limit). Use for large codebases." } }, required: ["pattern"], }, },
- src/index.ts:419-420 (registration)The switch case in the CallToolRequestSchema handler that routes calls to the findAllPattern method.case "find_all_pattern": return await this.findAllPattern(args as { pattern: string; limit?: number });