Skip to content

feat(objc): implement class name extraction in Objective-C parser #7

Description

@pleberre

Problem

The Objective-C parser does not extract class names from Objective-C messages, reducing metadata quality for error tracking.

Context

  • Referenced in commit 6917f98: "Find the Obj-C messages; todo: class name"
  • Objective-C uses bracket syntax for messages: [ClassName methodName:arg]
  • Class name is valuable metadata for error tracking and categorization

File Location

src/main/java/io/err0/client/languages/ObjectiveCCPPSourceCodeParse.java

Current Behavior

  • Parser recognizes Objective-C messages
  • Parser extracts method names
  • Parser does NOT extract class names

Expected Behavior

Parser should extract class names from:

[MyClass myMethod];                  // Class: MyClass
[self someMethod];                   // Class: self (or containing class)
[[MyClass alloc] init];             // Class: MyClass
[NSLog(@"message")];                // Class: NSLog (function, not class)

Implementation Guidance

  1. Look for patterns: [ClassName methodName
  2. Handle nested brackets: [[Class1 method1] method2]
  3. Handle self and super keywords
  4. Extract class name token and store in metadata
  5. Follow existing patterns from Java/Kotlin parsers for class name extraction

Test Cases Needed

Add tests in src/test/java/io/err0/client/test/Test0055ObjC.java:

  • Simple message send with class name
  • Nested message sends
  • self and super keywords
  • Mixed Objective-C and C code

Reference Files

  • src/main/java/io/err0/client/languages/JavaSourceCodeParse.java (for class name extraction pattern)
  • src/test/testdata/test0055/ (Objective-C test data)

Acceptance Criteria

  • Class names extracted from Objective-C message syntax
  • Metadata includes class name field
  • Tests pass for all cases
  • No regressions in existing Objective-C functionality

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions