docs(changelog): add Objective-C indexing entry under [Unreleased] (#429)
Covers #165: tree-sitter-objc extractor for .m / .mm / content-sniffed .h, with full multi-part selectors, @protocol nodes, @property, message expression call edges, extends/implements edges. Validated on AFNetworking / RestKit / Texture. Disclosed limitations match the README's 'Partial support' note (categories produce duplicate class nodes per category file; .mm ObjC++ parses incompletely under the ObjC grammar; mixed Swift/ObjC bridging out of scope, tracked separately). Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
61153f96ee
commit
1821038e4b
@@ -56,6 +56,34 @@ and adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
banner stays accurate at any debounce value because it's per-file, not a
|
||||
static "wait N ms" instruction.
|
||||
|
||||
- **Objective-C indexing — `.m`, `.mm`, and content-sniffed `.h` files now
|
||||
parse with full structural extraction (#165).** Adds a tree-sitter-objc
|
||||
extractor that produces `class` nodes for `@interface` / `@implementation`
|
||||
(deduplicated into one), `protocol` nodes for `@protocol`, methods with
|
||||
**full multi-part selectors** (`setObject:forKey:`, `tableView:didSelectRowAtIndexPath:`
|
||||
— not just the first keyword, which would collide distinct methods),
|
||||
`+`/`-` static distinction, `@property` declarations, `#import` for both
|
||||
`<system>` and `"local"` forms, and `extends` / `implements` edges for
|
||||
superclasses and `<Protocol>` conformance lists. Call edges come from
|
||||
both C-style `call_expression` and ObjC `message_expression` (with
|
||||
`self`/`super` skipped on qualified callee names). Header files default
|
||||
to C unless content-sniffing finds `@interface`/`@implementation`/
|
||||
`@protocol`/`@synthesize`, so iOS headers classify correctly without
|
||||
breaking pure-C projects. Validated on AFNetworking (84 files, 100% file
|
||||
coverage, 93 multi-keyword selectors), RestKit (282 files, 99.6%), and
|
||||
Texture (926 files, 100% — including heavy `.mm` ObjC++ content).
|
||||
|
||||
Disclosed limitations: categories produce one extra class node per
|
||||
category file (e.g. `ASDisplayNode+Yoga.m` creates a second `ASDisplayNode`
|
||||
node attributed to the category file); chained/nested message sends record
|
||||
only the innermost method; `[Class alloc]` patterns don't yet emit
|
||||
`instantiates` edges; `@protocol Foo <Bar>` refinement lists aren't wired
|
||||
to `implements`; heavy C++ in `.mm` files may parse incompletely under the
|
||||
ObjC grammar. Mixed Swift/Objective-C cross-language resolution
|
||||
(`@objc`-exposed Swift methods, bridging headers, React Native's native
|
||||
bridge) is **not** in scope for this entry — that's a separate effort
|
||||
tracked under the dynamic-dispatch coverage playbook.
|
||||
|
||||
### Fixed
|
||||
- **Git worktrees no longer silently borrow another tree's index (#155).**
|
||||
When a worktree is nested inside the main checkout — exactly what agent
|
||||
|
||||
Reference in New Issue
Block a user