{"id":"1ebc3916-a340-4b8a-9053-1a90e48174b5","shortId":"m9hzR7","kind":"skill","title":"smalltalk-implementation-finder","tagline":"Method implementation finder and analyzer for Pharo Smalltalk. Provides expertise in discovering implementors across class hierarchies (search_implementors), analyzing implementation patterns, learning coding idioms from existing implementations, assessing refactoring impact (cou","description":"# Smalltalk Implementation Finder\n\nFind and analyze method implementations across class hierarchies to understand abstract methods, implementation patterns, and assess refactoring opportunities.\n\n## Purpose\n\nUse this skill to:\n- **Learn implementation idioms** by studying existing code\n- **Assess refactoring impact** before making changes\n- **Discover implementation patterns** across class hierarchies\n- **Find duplicate implementations** that could be consolidated\n- **Understand subclass responsibilities** for abstract methods\n\n## Core Workflow\n\n```\n1. Find implementors → search_implementors(method_name)\n2. Get source code → get_method_source(class, method)\n3. Analyze patterns → Compare implementations\n4. Apply learnings → Use discovered idioms in your code\n```\n\n## Primary Use Cases\n\n### 1. Learning Implementation Idioms\n\n**When to use**: Implementing a method for the first time and want to follow conventions.\n\n**Quick workflow**:\n```\n1. search_implementors(\"methodName\")\n2. Sample 5-10 well-known classes\n3. get_method_source for each\n4. Identify common pattern\n5. Apply to your implementation\n```\n\n**Common idioms**:\n- `hash` → Combine fields with `bitXor:`\n- `initialize` → Call `super initialize` first\n- `=` → Check class equality, then compare fields\n- `printOn:` → Use class identifier + element printing\n\n**Example**: Learning hash implementation\n```\nPoint>>hash → \"^ x hash bitXor: y hash\"\nAssociation>>hash → \"^ key hash bitXor: value hash\"\n\nPattern: field1 hash bitXor: field2 hash\n```\n\n### 2. Assessing Refactoring Impact\n\n**When to use**: Planning to change a method signature or refactor implementations.\n\n**Quick workflow**:\n```\n1. Count implementors: search_implementors(method)\n2. Count references: search_references(method)\n3. Assess impact: Low (<5 impl, <20 refs) / Medium (5-20, 20-100) / High (20+, 100+)\n4. Decide: Proceed / Add new method / Don't change\n```\n\n**Example**: Changing `at:put:`\n```\nImplementors: 50+ classes\nReferences: 500+ call sites\nImpact: VERY HIGH\nDecision: Don't change. Add new method instead.\n```\n\n### 3. Finding Duplicate Code\n\n**When to use**: Suspect multiple classes have identical implementations.\n\n**Quick workflow**:\n```\n1. Find implementors in same hierarchy\n2. Get source for each\n3. Compare for duplicates\n4. Refactor identical code to superclass\n```\n\n**Example**: Consolidating `isEmpty`\n```\nArray>>isEmpty → \"^ self size = 0\"\nSet>>isEmpty → \"^ self size = 0\"\nOrderedCollection>>isEmpty → \"^ self size = 0\"\n\nAction: Pull up to Collection superclass\n```\n\n### 4. Understanding Abstract Methods\n\n**When to use**: Encountering `self subclassResponsibility` and need to see concrete implementations.\n\n**Quick workflow**:\n```\n1. Check abstract definition in superclass\n2. Find all implementors\n3. Study 3-5 concrete implementations\n4. Understand expected behavior\n```\n\n**Example**: Understanding `Collection>>do:`\n```\nCollection>>do: → \"self subclassResponsibility\"\nArray>>do: → \"1 to: self size do: [:i | aBlock value: (self at: i)]\"\nLinkedList>>do: → \"[node notNil] whileTrue: [aBlock value: node value. ...]\"\n\nUnderstanding: Each uses its own iteration strategy\n```\n\n### 5. Narrowing Usage Search\n\n**When to use**: Finding references to a specific class's implementation, not all implementations.\n\n**Quick workflow**:\n```\n1. Find implementors\n2. Find all references\n3. Filter by receiver type/context\n4. Focus on relevant usage\n```\n\n**Example**: Finding `Collection>>select:` usage (not `Dictionary>>select:`)\n```\nImplementors: [Collection, Dictionary, Interval, ...]\nReferences: 1000+ call sites\n\nFilter by variable context:\n  \"myArray select: [...]\" → Collection implementation\n  \"myDict select: [...]\" → Dictionary implementation\n```\n\n## MCP Tools\n\n### search_implementors\n```\nmcp__smalltalk-interop__search_implementors: 'methodName'\n```\nReturns all classes implementing the method.\n\n### get_method_source\n```\nmcp__smalltalk-interop__get_method_source: class: 'ClassName' method: 'methodName'\n```\nGets source code for a specific implementation.\n\n### eval (for hierarchy exploration)\n```\nmcp__smalltalk-interop__eval: 'Collection allSubclasses'\n```\nUseful for scoping analysis to specific hierarchies.\n\n### search_references\n```\nmcp__smalltalk-interop__search_references: 'methodName'\n```\nFinds all senders (combines well with implementor analysis).\n\n## Quick Reference\n\n| Goal | Tools | Pattern |\n|------|-------|---------|\n| Learn idiom | search_implementors → get_method_source | Sample 5-10, identify pattern |\n| Assess impact | search_implementors + search_references | Count both, assess risk |\n| Find duplicates | search_implementors → get_method_source | Compare, find identical |\n| Narrow usage | search_implementors → search_references | Filter by receiver type |\n\n## Best Practices\n\n### ✅ Do\n\n- **Scope by hierarchy**: Focus on relevant class hierarchies using `eval(\"ClassA allSubclasses\")`\n- **Sample wisely**: Choose well-known, well-implemented classes (Array, Dictionary, Point)\n- **Count first**: Get overview before analyzing 500+ implementations\n- **Check super**: Understand inherited behavior\n\n### ❌ Don't\n\n- Analyze all implementors without filtering\n- Use obscure classes as examples\n- Ignore superclass implementations\n- Assume same method name = same behavior\n\n## Common Workflows\n\n### Workflow: Implement Abstract Method\n```\nProblem: Need to implement printOn: in new class\n\n1. search_implementors(\"printOn:\")\n2. Filter to similar classes\n3. get_method_source for 3-5 examples\n4. Identify pattern\n5. Apply to your class\n```\n\n### Workflow: Assess Refactoring\n```\nProblem: Want to change at:put: signature\n\n1. search_implementors(\"at:put:\") → Count implementations\n2. search_references(\"at:put:\") → Count call sites\n3. Assess impact (High/Medium/Low)\n4. Decide: Change / Add new / Don't change\n```\n\n### Workflow: Find Duplication\n```\nProblem: Suspect duplicate isEmpty implementations\n\n1. search_implementors(\"isEmpty\")\n2. Focus on Collection hierarchy\n3. get_method_source for subclasses\n4. Compare for identical code\n5. Refactor to superclass if identical\n```\n\n## Detailed Resources\n\nFor comprehensive analysis techniques and real-world scenarios, see:\n\n- **[Implementation Analysis Reference](references/implementation-analysis.md)** - Detailed techniques for analyzing implementations, MCP tools reference, advanced patterns, and performance considerations\n- **[Implementation Scenarios](examples/implementation-scenarios.md)** - Real-world examples including implementing abstract methods, assessing refactoring impact, finding duplicate code, learning idioms, and understanding template method patterns\n\n## Summary\n\n**Key principle**: Implementations across a hierarchy reveal design patterns and idioms. Use them to write better, more idiomatic code.\n\n**Primary workflow**: Find implementors → Get source → Analyze patterns → Apply learnings\n\n**Remember**: Always scope your analysis to relevant hierarchies and representative classes to avoid information overload.","tags":["smalltalk","implementation","finder","dev","plugin","mumez","agent-skills","agents","claude-code","marketplace","mcp","pharo-smalltalk"],"capabilities":["skill","source-mumez","skill-smalltalk-implementation-finder","topic-agent-skills","topic-agents","topic-claude-code","topic-marketplace","topic-mcp","topic-pharo-smalltalk","topic-plugin","topic-skills","topic-smalltalk"],"categories":["smalltalk-dev-plugin"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/mumez/smalltalk-dev-plugin/smalltalk-implementation-finder","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add mumez/smalltalk-dev-plugin","source_repo":"https://github.com/mumez/smalltalk-dev-plugin","install_from":"skills.sh"}},"qualityScore":"0.455","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 11 github stars · SKILL.md body (6,967 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T07:03:21.963Z","embedding":null,"createdAt":"2026-04-23T13:04:03.491Z","updatedAt":"2026-04-24T07:03:21.963Z","lastSeenAt":"2026-04-24T07:03:21.963Z","tsv":"'-10':157,589 '-100':267 '-20':265 '-5':393,713 '0':345,350,355 '1':96,129,150,243,317,380,410,457,698,733,768 '100':270 '1000':487 '2':103,154,225,249,323,386,460,702,740,772 '20':261,266,269 '3':112,162,255,302,328,390,392,464,707,712,748,777 '4':117,168,271,332,362,396,469,715,752,783 '5':156,172,259,264,437,588,718,788 '50':285 '500':288,656 'ablock':416,426 'abstract':49,92,364,382,688,832 'across':18,44,78,851 'action':356 'add':274,298,755 'advanc':818 'allsubclass':550,636 'alway':878 'analysi':554,574,798,807,881 'analyz':9,23,41,113,655,665,813,873 'appli':118,173,719,875 'array':341,408,647 'assess':32,54,69,226,256,592,600,724,749,834 'associ':212 'assum':678 'avoid':889 'behavior':399,662,683 'best':622 'better':863 'bitxor':183,209,216,222 'call':185,289,488,746 'case':128 'chang':74,234,279,281,297,729,754,759 'check':189,381,658 'choos':639 'class':19,45,79,110,161,190,197,286,311,449,515,529,631,646,672,697,706,722,887 'classa':635 'classnam':530 'code':27,68,106,125,305,335,535,787,839,866 'collect':360,402,404,476,483,496,549,775 'combin':180,570 'common':170,177,684 'compar':115,193,329,609,784 'comprehens':797 'concret':376,394 'consider':822 'consolid':87,339 'context':493 'convent':147 'core':94 'cou':35 'could':85 'count':244,250,598,650,738,745 'decid':272,753 'decis':294 'definit':383 'design':855 'detail':794,810 'dictionari':480,484,500,648 'discov':16,75,121 'duplic':82,304,331,603,762,765,838 'element':199 'encount':369 'equal':191 'eval':540,548,634 'exampl':201,280,338,400,474,674,714,829 'examples/implementation-scenarios.md':825 'exist':30,67 'expect':398 'expertis':14 'explor':543 'field':181,194 'field1':220 'field2':223 'filter':465,490,618,669,703 'find':39,81,97,303,318,387,444,458,461,475,567,602,610,761,837,869 'finder':4,7,38 'first':141,188,651 'focus':470,628,773 'follow':146 'get':104,107,163,324,519,526,533,584,606,652,708,778,871 'goal':577 'hash':179,203,206,208,211,213,215,218,221,224 'hierarchi':20,46,80,322,542,557,627,632,776,853,884 'high':268,293 'high/medium/low':751 'ident':313,334,611,786,793 'identifi':169,198,590,716 'idiom':28,64,122,132,178,581,841,858 'idiomat':865 'ignor':675 'impact':34,71,228,257,291,593,750,836 'impl':260 'implement':3,6,24,31,37,43,51,63,76,83,116,131,136,176,204,240,314,377,395,451,454,497,501,516,539,645,657,677,687,693,739,767,806,814,823,831,850 'implementor':17,22,98,100,152,245,247,284,319,389,459,482,505,511,573,583,595,605,615,667,700,735,770,870 'includ':830 'inform':890 'inherit':661 'initi':184,187 'instead':301 'interop':509,525,547,563 'interv':485 'isempti':340,342,347,352,766,771 'iter':435 'key':214,848 'known':160,642 'learn':26,62,119,130,202,580,840,876 'linkedlist':421 'low':258 'make':73 'mcp':502,506,522,544,560,815 'medium':263 'method':5,42,50,93,101,108,111,138,164,236,248,254,276,300,365,518,520,527,531,585,607,680,689,709,779,833,845 'methodnam':153,512,532,566 'multipl':310 'myarray':494 'mydict':498 'name':102,681 'narrow':438,612 'need':373,691 'new':275,299,696,756 'node':423,428 'notnil':424 'obscur':671 'opportun':56 'orderedcollect':351 'overload':891 'overview':653 'pattern':25,52,77,114,171,219,579,591,717,819,846,856,874 'perform':821 'pharo':11 'plan':232 'point':205,649 'practic':623 'primari':126,867 'principl':849 'print':200 'printon':195,694,701 'problem':690,726,763 'proceed':273 'provid':13 'pull':357 'purpos':57 'put':283,731,737,744 'quick':148,241,315,378,455,575 'real':802,827 'real-world':801,826 'receiv':467,620 'ref':262 'refactor':33,55,70,227,239,333,725,789,835 'refer':251,253,287,445,463,486,559,565,576,597,617,742,808,817 'references/implementation-analysis.md':809 'relev':472,630,883 'rememb':877 'repres':886 'resourc':795 'respons':90 'return':513 'reveal':854 'risk':601 'sampl':155,587,637 'scenario':804,824 'scope':553,625,879 'search':21,99,151,246,252,440,504,510,558,564,582,594,596,604,614,616,699,734,741,769 'see':375,805 'select':477,481,495,499 'self':343,348,353,370,406,412,418 'sender':569 'set':346 'signatur':237,732 'similar':705 'site':290,489,747 'size':344,349,354,413 'skill':60 'skill-smalltalk-implementation-finder' 'smalltalk':2,12,36,508,524,546,562 'smalltalk-implementation-find':1 'smalltalk-interop':507,523,545,561 'sourc':105,109,165,325,521,528,534,586,608,710,780,872 'source-mumez' 'specif':448,538,556 'strategi':436 'studi':66,391 'subclass':89,782 'subclassrespons':371,407 'summari':847 'super':186,659 'superclass':337,361,385,676,791 'suspect':309,764 'techniqu':799,811 'templat':844 'time':142 'tool':503,578,816 'topic-agent-skills' 'topic-agents' 'topic-claude-code' 'topic-marketplace' 'topic-mcp' 'topic-pharo-smalltalk' 'topic-plugin' 'topic-skills' 'topic-smalltalk' 'type':621 'type/context':468 'understand':48,88,363,397,401,430,660,843 'usag':439,473,478,613 'use':58,120,127,135,196,231,308,368,432,443,551,633,670,859 'valu':217,417,427,429 'variabl':492 'want':144,727 'well':159,571,641,644 'well-impl':643 'well-known':158,640 'whiletru':425 'wise':638 'without':668 'workflow':95,149,242,316,379,456,685,686,723,760,868 'world':803,828 'write':862 'x':207 'y':210","prices":[{"id":"0233f750-7e23-4c48-8c80-6376b571c7db","listingId":"1ebc3916-a340-4b8a-9053-1a90e48174b5","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"mumez","category":"smalltalk-dev-plugin","install_from":"skills.sh"},"createdAt":"2026-04-23T13:04:03.491Z"}],"sources":[{"listingId":"1ebc3916-a340-4b8a-9053-1a90e48174b5","source":"github","sourceId":"mumez/smalltalk-dev-plugin/smalltalk-implementation-finder","sourceUrl":"https://github.com/mumez/smalltalk-dev-plugin/tree/develop/skills/smalltalk-implementation-finder","isPrimary":false,"firstSeenAt":"2026-04-23T13:04:03.491Z","lastSeenAt":"2026-04-24T07:03:21.963Z"}],"details":{"listingId":"1ebc3916-a340-4b8a-9053-1a90e48174b5","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"mumez","slug":"smalltalk-implementation-finder","github":{"repo":"mumez/smalltalk-dev-plugin","stars":11,"topics":["agent-skills","agents","claude-code","marketplace","mcp","pharo-smalltalk","plugin","skills","smalltalk"],"license":"mit","html_url":"https://github.com/mumez/smalltalk-dev-plugin","pushed_at":"2026-04-21T15:21:41Z","description":"Claude Code plugin for AI-driven Smalltalk (Pharo) development","skill_md_sha":"3a12b9625e1b0cf1a6f342ec049923e6b4b0d4ee","skill_md_path":"skills/smalltalk-implementation-finder/SKILL.md","default_branch":"develop","skill_tree_url":"https://github.com/mumez/smalltalk-dev-plugin/tree/develop/skills/smalltalk-implementation-finder"},"layout":"multi","source":"github","category":"smalltalk-dev-plugin","frontmatter":{"name":"smalltalk-implementation-finder","description":"Method implementation finder and analyzer for Pharo Smalltalk. Provides expertise in discovering implementors across class hierarchies (search_implementors), analyzing implementation patterns, learning coding idioms from existing implementations, assessing refactoring impact (counting implementors and references), finding duplicate code for consolidation, understanding abstract method implementations (subclassResponsibility), and tracing method overrides through inheritance chains. Use when analyzing method implementations across classes, learning implementation idioms, assessing refactoring risk before changes, finding duplicate implementations for consolidation, understanding how abstract methods are implemented in concrete classes, or tracing which classes override specific methods."},"skills_sh_url":"https://skills.sh/mumez/smalltalk-dev-plugin/smalltalk-implementation-finder"},"updatedAt":"2026-04-24T07:03:21.963Z"}}