[TxMt] Objective-C bundle - method not highlighted inside #ifdef

Allan Odgaard throw-away-1 at macromates.com
Fri May 18 22:38:19 UTC 2007

On 18. May 2007, at 18:53, Fritz Anderson wrote:

> Consider the following code:
> [...]
> The name of the method setSerialNumber: is not highlighted, and it  
> does not appear in the function popup. Removing the #ifndef cures  
> both problems.
> Is there something I can do? Is there a later version of the Obj-C  
> bundle that covers this?

That’s a tricky problem to solve (sort of).

In the C grammar there are rules to mark #if 0 … #endif as commented.  
This is a little more complex than so, as it needs to handle nesting  
of such preprocessor instructions, the #else case, etc. It also has a  
general #if(n?def)? match so that an #else belonging to an outer #if/ 
#else/#endif is not mistaken as belonging to the #if 0/#endif.

Between the preprocessor conditionals, the C grammar includes $base,  
meaning full Objective-C, if that is the chosen language.

But, in Objective-C methods are only matched between  
@implementation / @end. So it is not enough to include $base in the C  
grammar, it really wants something like $parent (referring to the  
rules which were active in the parent scope), though this  
functionality does not presently exist.

One fix could be to always match methods (in the Objective-C  
grammar), another would be to not care about matching #if(n?def)? in  
the root scope -- I am actually not entirely sure we need to track  
it, since #else binds to the innermost conditional. But I’ll have to  
ponder this before making any changes to the grammar.

More information about the textmate mailing list