Language record
Objective-C
Objective-C is indexed per translation unit with selectors kept whole: a method is recorded under its full selector — storeImage:forName:, not storeImage — so a message send can actually be matched to the declaration it reaches.
The registry row this page is generated from
Read at render time from the same family row the register reads, so nothing in this block can disagree with it.
- Extensions
- .m, .mm, .h
- Registry names
objective-c- Recorded symbols
- classes · protocols · methods
Relationship types this analyzer constructs
11 of 14 constructed, read from this analyzer's source and re-derived by the languages gate. Each row below is one of the engine's types, in the engine's own order.
| Relationship type | Constructed |
|---|---|
calls | constructed by this analyzer |
extends | constructed by this analyzer |
implements | constructed by this analyzer |
uses | constructed by this analyzer |
imports | constructed by this analyzer |
exports | constructed by this analyzer |
contains | constructed by this analyzer |
references | constructed by this analyzer |
overrides | constructed by this analyzer |
instantiates | constructed by this analyzer |
decorates | ruled absent |
renders | ruled absent |
mixes_in | ruled absent |
part_of | constructed by this analyzer |
11 constructed, 3 not constructed. All 3 absent types are recorded as ruled absent: the written reason and the corpus measurement behind each are in this family's completeness record. The register explains what each label means.
What this analyzer does not resolve
- The unit is the .m file: a header in the same project is a separate parse, so an instance variable declared there reads as undeclared here and an override of a base named in that header falls back to a first-parent guess at reduced confidence.
- A message send is recorded by selector name, not by a resolved receiver type. Nothing follows respondsToSelector: or a runtime-typed object, so dynamic dispatch is an edge to a name.
- An @class forward declaration and an @protocol(P) type query produce no symbol and no edge at all.
Every line above was written against Objective-C’s own analyzer module and is named against a construct in it, so it can be checked against the source. Nothing here is inherited from a template, or from another language’s page.
Where you meet it in a repository
Recognised by extension — .m, .mm, .h. Everything below is about where those files actually sit in a working repository.
- An Objective-C library is a header plus a .m file, and the public surface lives in the header — the half the implementation file cannot see.
- Categories are how a project adds methods to a type it does not own, so the category file is a first-class place in the tree rather than a subclass.
- Most message sends target a framework type, so the far end of a call edge is usually a name with no declaration behind it.
Questions this index answers
Phrased as retrievals, because that is what an index can honestly do: it holds the symbols and the edges between them, and hands them back with the evidence attached.
- Which methods does this category add to the class?
- Which protocols does this class conform to?
- Where is this selector sent from?
- Which properties and instance variables does this implementation declare?
What the analyzer sees in code like this
#import <UIKit/UIKit.h>
@interface NSString (Trim) <NSCoding> // bb records: extension NSString · protocol NSCoding
- (NSString *)bb_trim:(BOOL)compact; // bb records: method bb_trim:
@end
@implementation MyCache { NSLock *_lock; } // bb records: class MyCache · property _lock
- (void)storeImage:(UIImage *)image { [self clear]; } // bb records: method storeImage:
@endSymbols are stored with the file they came from and the bytes they span, so a hit points at a line rather than at a guess. The annotations in the sample are commentary for the reader, not strings the index would store.
Languages that turn up in the same repository
Application & systems — the count beside each name is how many relationship types that family’s analyzer constructs.
The extensions, registry names, recorded symbols and relationship types above are the parser registry row for Objective-C, read while the page rendered — the same row the register reads, so the two surfaces cannot tell two stories. Every relationship type listed as constructed appears in src/ast/real-*, the analyzer modules bb ships. bb 0.1.0 answers from a local store over 50 languages (53 registry ids, three of them aliases). There is no benchmark on this page: every claim here is one you can go and read in the source.