indentation du code décalée
ClicCool
Membre
Bonjour,
j'ai peut-être loupé quelques chose avec la nouvelle version d'Xcode mais je n'arrive pas à rectifier l'indentation de mon code dès qu'un @//etc. est utilisé.
En effet dans le cadre de l'exploration des neuds d'un NSXMLDocument j'ai parfois des xPath commençant par @//
Ce que la doc confirme comme valide:
Du reste le compilo ne bronche pas et surtout ça marche comme un charme.
Mais les 2 // fichent systématiquement le basar dans l'indentation du code qui chaque fois se décale d'un cran à droite.
Je vais finir par avoir besoin d'un 2ème écran à droite pour suivre le fil de mon code ...
Quelqu'un a une solution ?
Y aurait-il un réglage qui m'a échapé ???
j'ai peut-être loupé quelques chose avec la nouvelle version d'Xcode mais je n'arrive pas à rectifier l'indentation de mon code dès qu'un @//etc. est utilisé.
En effet dans le cadre de l'exploration des neuds d'un NSXMLDocument j'ai parfois des xPath commençant par @//
Ce que la doc confirme comme valide:
.../...You often begin an XPath expression with a double slash (?//?) followed by an element name.../...
Du reste le compilo ne bronche pas et surtout ça marche comme un charme.
Mais les 2 // fichent systématiquement le basar dans l'indentation du code qui chaque fois se décale d'un cran à droite.
Je vais finir par avoir besoin d'un 2ème écran à droite pour suivre le fil de mon code ...
Quelqu'un a une solution ?
Y aurait-il un réglage qui m'a échapé ???
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Mais j'aimerais bien comprendre.
Essaye éventuellement avec des macros genre :
[tt]#define XPATH(p) @ "//" #p[/tt]
En l'utilisant avec XPATH(truc/bidule) pour générer @//truc/bidule
Note que je ne suis même pas sûr que ça marchera car autant en C et C++ quand on met plusieurs chaines à la suite "a" "b" "c" le compilo les traitent comme si c'était une unique chaine "abc" autant avec le "@" de l'Obj-C devant je ne sais pas si [tt]@ "cou" "cou"[/tt] est équivalent à [tt]@coucou[/tt]... faut tester.
[EDIT]Suis en train de penser que c'est quand même bizarre comme bug étant donné que si on fait un commentaire "//" dans le code, de façon normale et donc hors d'une chaà®ne, ça n'indente pas pour autant la ligne sur laquelle on fait le commentaire... Mais bon pour moi ça reste un bug du module d'intendation d'Xcode, à faire remonter à Apple.
Je me suis fait la même réflexion,
et pourtant elle tourne
Merci Ali, je vais tester ça ce soir.
Je viens de terminer mon travail et j'ai immédiatement essayé
et un truc comme marche très bien avec ta définition de Macro.
Merci ça me fait apprivoiser un peu plus les macros.
Mais je me retrouve avec les même anomalies de l'indentation juste au dessous de mes délarations de macros contenant la séquence @// !!
Par ailleurs, tant qu'à déplacer cette indentation loufoque au début de mon .m, j'aimerais autant ne pas taper non plus le nom des tags en clair dans le code.
Avec un ça marche bien (sauf l'indentation immédiatement en dessous).
Mais n'y aurait-il pas moyen d'utiliser un typedef déclarant toutes les valeurs possibles comme un type donné afin que le compilo puisse m'alerter si la valeur n'est pas du bon type?
Je connais, dans ce sens, pour les valeurs entières:
Y a-t-il un moyen de définir un type avec une liste exaustive de valeurs de type Object (comme une NSString) et non plus int ?
Inutile donc de le signaler à Apple.
J'ai mis 2 variantes car je ne sais pas laquelle des 2 fonctionnera, si tant est qu'une des 2 fonctionne, mais le but est de générer le XPath "//tr/img" donc bien avec les "//" au début du XPath, "//" que tu ne précises pas dans ton code puisque c'est la macro qui les rajoute.Du coup au moment de définir s et/ou s2 il n'y a pas de problème d'indentation, alors que ça définit bien le XPath "//tr/img".- Ce n'est pas tant un typedef qu'un enum que tu utilises (un typedef est pour définir un type de données, en l'occurence le type enum. Par contre c'est le faire de définir et utiliser l'enum (énumération) qui fait que tu n'as pas le droit (erreur de compilation si tu le fais) d'utiliser d'autres valeurs que celle énumérées. Les enum ne marchent qu'avec des valeurs entières (d'ailleurs dans certains compilateurs, enum et int ont le même type, même si c'est pas tout à fait vrai justement de par cette validation que les valeurs existent)
Quant à remplacer ton enum par un équivalent mais pour les chaines, ce n'est pas possible avec un enum, mais tu peux le faire :
- soit en utilisant des chaines static (comme tu le fais)
- soit avec des DEFINE : [tt]#define CCIMGPATH @//tr/img[/tt].
Ce que je ne capte pas c'est en quoi l'utilisation de static NSString* comme tu le fais déjà au début de ton programme te pose problème ? Si tu rentres un nom que tu n'as pas défini (faute de frappe par exemple "CCBalizAlerteImg"), le compilo va de toute façon te gueuler dessus, donc tant mieux, non ? Et avec les #define ça fait la même chose, donc...
Dans quel cas voudrais-tu qu'il te gueule dessus alors que pour l'instant il ne le fait pas ?
[tt]#define CCStickCornerNone @""
#define CCStickCornerTopLeft @cornerLeft
...[/tt]
Si tu veux on échange nos statuts, pour le coup :P
Bon, vous disputez pas, ça répond pas tout à fait à ma question ça
Ce que j'aurais voulu, c'est que toutes les valeurs genre CCBaliseAlerteImg soient définie comme les seules acceptable pour un type défini par moi-même genre CCBalisesAlerte.
De façon a ce qu'un argument de type CCBalisesAlerte ne puisse pas avoir d'autre valeur que la série de CCBaliseAlerteImg CCBaliseAlerteErrorMsg, CCBaliseAlertelastSucces etc. sans que le compilateure ne pousse sa complainte du fond des bois.
[EDIT]
Histoire que je balance jamais dans le code une balise hors contexte gerne CCBalisePasYaAliEtRenaudOuBruQuiVontTrouverUneSolution alors que là le compilo en attendait une du genre CCBalisesAlerte.
Ben oui, c'est bien ce que j'ai fait mais je me suis mal exprimmé.
1°) en début du .m:
2°) plus bas dans le code des méthodes j'utilise XPATH(@tr/img) dans:
Et ça marche
merci
Va falloir que je révise mes cours sur les macros, moi
Sinon pour le truc de ton enum, ce n'est pas possible avec autre chose que des entiers (le compilateur ne sait pas faire de "strcmp" au moment de la compilation pour vérifier que 2 chaines sont identiques !)... par contre...
Par contre tu peux utiliser les enum si tu mets un système adéquat derrière. Par exemple un tableau (pourquoi pas de type C, pour le coup ça suffit carrément, pas besoin d'un NSArray) : Avec ce code tu ne peux passer comme ID que [tt]CCImgInTr[/tt] ou [tt]CCImgInDiv[/tt], si tu mets [tt]CCLiInTr[/tt] par exemple il va te gueuler dessus car ce n'est pas un CCImgTagID.
En réalité tu vois que je passe par des int, qui ne sont rien d'autre que des index de ton tableau global CCTagsList, mais ça reste relativement élégant et répond à ta demande
:adios!:
ça me va impec ta solution avec un tableau en c référencé par des enums !
Ben euh,
Comment dire ?
En fait, euh,
Ben voilà , c'est moi qui m'est trompé quoi !
T'as raison, ça marche sans les @"" et pas avec.
désolé
j'espère que t'as pas encore eu le temps de réviser toute la doc sur le macros, c'est inutile pour toi ...