XCode 2.0 - Text Macros

CouhoulinnCouhoulinn Membre
05:51 modifié dans Xcode et Developer Tools #1
Le sujet décrit dans l'ADC à  la page http://developer.apple.com/documentation/DeveloperTools/Conceptual/XcodeUserGuide20/Contents/Resources/en.lproj/index.html ne va pas assez loin, en tout cas ne dit pas tout  >:D

Votre serviteur a fouillé les recoins de XCode2 pour trouver le problème que Renaud et moi rencontrons à  savoir sur les ")" et les "]" qui n'apparaissent pas quand on fait de l'auto-completion de fonctions ou de méthodes. J'ai découvert les fichiers pour les macros de textes dans le répertoire [tt]/Developer/Applications/Xcode.app/Contents/PlugIns/TextMacros.xctxtmacro/Contents/Resources/[/tt]

Dedans, on peut voir les fichiers pour plusieurs langages tels que le C, le C++, l'HTML mais surtout ce qui nous intéresse l'Objective-C

[tt]/Developer/Applications/Xcode.app/Contents/PlugIns/TextMacros.xctxtmacro/Contents/Resources/ObjectiveC.xctxtmacro[/tt]

Dedans on peut voir la structure des macros que l'on retrouve dans le Menu "Edit > Insert Text Macro >"  de notre IDE fétiche.

Dedans, il y a d'abord quelques définitions pour mieux paramétrer (on rencontre ça pour les documents make par exemple) :

<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; Identifier = objc;<br />&nbsp; &nbsp; &nbsp; &nbsp; Name = &quot;Objective C&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; IsMenu = YES;<br />&nbsp; &nbsp; &nbsp; &nbsp; DefaultSettings = {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PreExpressionsSpacing = &quot; &quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InExpressionsSpacing = &quot;&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BlockSeparator = &quot; &quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PostBlockSeparator = &quot;&#092;n&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; };<br />&nbsp; &nbsp; &nbsp; &nbsp; ComputerLanguages = ( &quot;c.objc&quot;, &quot;c.objcpp&quot; );<br />&nbsp; &nbsp; },<br />


Deux exemple de macro présents dans le fichier :

<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Identifier = objc.init;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BasedOn = objc;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IsMenuItem = YES;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Name = &quot;Init Method Definition&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TextString = &quot;- (id) init$(BlockSeparator){&#092;n&#092;tself = [super init];&#092;n&#092;tif$(PreExpressionsSpacing)(self != nil)$(BlockSeparator){&#092;n&#092;t&#092;t&lt;#!initializations!#&gt;&#092;n&#092;t}&#092;n&#092;treturn self;&#092;n}&#092;n&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CompletionPrefix = init;<br />&nbsp; &nbsp; &nbsp; &nbsp; },<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Identifier = objc.allocinit;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BasedOn = objc;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IsMenuItem = YES;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Name = &quot;Alloc / Init Call&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TextString = &quot;[[&lt;#!class!#&gt; alloc] init]&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CompletionPrefix = a;<br />&nbsp; &nbsp; &nbsp; &nbsp; },<br />


Je montre le premier exemple pour l'importance des définitions, je vais m'attarder au second pour illustrer une première astuce :

Il faut noter le champ "CompletionPrefix", celui-ci sert à  - ce que ne dit pas le User Guide de XCode 2.0 - faire facilement des macros avec l'aide de l'autocompletion au lieu du menu "Edit > Insert Text Macro >"

En effet, il vous suffit de taper dans l'éditeur de Xcode la lettre a et d'appuyer sur ESC (qui appelle la liste d'autocompletion) pour tomber DIRECTEMENT sur l'objet "Alloc / Init Call" appuyer sur TAB ou ENTER et vous récupérer tout de suite "[[<#!class!#> alloc] init]" Avec de l'habitude et des réflexes, on peut facilement gagner du temps.


Je reviens au problèmes des "]" fermantes qui ont disparues de l'auto-completion. Je crois qu'il faut prendre ce problème d'une façon différente - avec ce que j'ai découvert du fichier des macros - Je pense que les ingénieurs d'Apple attendent que l'on mettent d'abord les "[ ]" avant de les remplir :

<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Identifier = objc.bracket;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BasedOn = objc;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IsMenuItem = YES;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Name = &quot;Bracket Expression&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TextString = &quot;[&lt;#!expression!#&gt; ]&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; },<br />


Il y a une macro pour celle-ci. Que l'on retrouve dans le menu "Edit > Insert Text Macro". Sans trop regarder, j'ai voulu essayer s'il y avait un raccourci mais comme on peut le voir dans le fichier qui définit les macros, ce fut peine perdue. J'ai donc eu l'idée, deuxième astuce, de mettre un champ CompletionPrefix :

&nbsp; &nbsp; &nbsp;  <br />&nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Identifier = objc.bracket;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BasedOn = objc;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IsMenuItem = YES;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Name = &quot;Bracket Expression&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TextString = &quot;[&lt;#!expression!#&gt; ]&quot;;<br />	&nbsp; &nbsp; &nbsp; CompletionPrefix = bra;<br />&nbsp; &nbsp; &nbsp; &nbsp; },<br />


J'ai utilisé bra (pour bracket ou brace) car cela n'existait pas dans la liste d'auto-completion. Vous redémarrez XCode et vous essayer bra + ESC => bingo, ça marche :)

Pour les raccourcis, il y en a quelques-uns utiles

@try
@catch
@finally
log
bra :kicking:
a => pour un [["classe" alloc ]init]
fora
init
dealloc
nss => pour NSString super intéressant  <3 <br />nsmd
nsa

... ect regarder le fichiers en question pour tous les connaà®tre  :D
Connectez-vous ou Inscrivez-vous pour répondre.