Formatage automatique de la source Xcode


179

En tant que développeur C #, je suis devenu très dépendant de la mise en forme automatique dans Visual Studio 2008. Plus précisément, j'utiliserai le raccourci clavier CTRL+ K, Dpour forcer les choses à se remettre en forme après mon implémentation bâclée.

J'essaie maintenant d'apprendre Objective-C et il me manque certaines fonctionnalités dans Xcode, mais aucune n'est probablement aussi pénible que le raccourci de formatage. Mes recherches sur Google n'ont rien donné de intégré, bien qu'il semble qu'il y ait des hacks. Est-ce que je manque quelque chose ou cette fonctionnalité n'existe-t-elle pas de manière native dans Xcode?


1
Il y a de bons liens vers des solutions de script Xcode dans les réponses à cette question SO
nall

Merci pour le lien. J'ai trouvé ça aussi: blog.carbonfive.com/2009/08/iphone/code-formatting-in-xcode Il couvre fondamentalement la même technique que votre lien. Je vais essayer et voir comment cela fonctionne.
jslatts

1
Solution tierce utilisant UniversalIndentGUI: blog.carbonfive.com/2009/08/iphone/code-formatting-in-xcode
jslatts

Similaire à cette question; La réponse a un élément de menu et un raccourci clavier pour ré-indenter le code: stackoverflow.com/questions/3558709/...
Basil Bourque

2
y a-t-il eu une innovation d'Apple au cours des 5 dernières années à ce sujet? Cette question est-elle toujours d'actualité ou XCode est-il maintenant une nouvelle et meilleure solution pour formater le code?
mm24

Réponses:


134

Malheureusement, Xcode n'a rien d'aussi complet que VS ou Jalopy pour Eclipse. Il existe des fonctionnalités disparates, telles que Structure > Re-Indentle formatage automatique utilisé lorsque vous collez du code dans votre fichier source. Je suis cependant totalement avec vous; il devrait certainement y avoir quelque chose là-dedans pour résoudre les problèmes de formatage.


3
Merci, au moins je sais que je ne manque pas quelque chose. L'identification automatique aide à atténuer la douleur, mais je devrai me pencher sur une solution tierce.
jslatts

5
cela ne devrait pas être choisi comme réponse. la réponse ci-dessous de @ken est correcte
Ryan Angilly

@RyanAngilly Notez l'année où cette question a été répondue. Beaucoup de choses ont changé avec Xcode depuis lors. ;-)
Marc W

1
@RyanAngilly ken a seulement décrit comment l'indentation automatique. Ce n'est pas ce que signifie vraiment le «format» (avec des espaces blancs, des ajouts et des suppressions de nouvelle ligne, etc.).
dergab

5
L'indentation peut être corrigée avec control-i, qui indentera toutes les lignes sélectionnées.
zaph le

427

C'est Ctrl+ i.

Ou pour les low-tech, coupez puis collez. Il sera reformaté sur pâte.


Merci! C'est utile, d'autant plus que le menu n'affiche pas réellement le raccourci clavier.
jslatts

37
Mais cela ne fait que l'indentation. Qu'en est-il du déplacement des accolades, de la prise en charge des sauts de ligne, etc.?
Peter Ajtai

14
Cela ne devrait pas être accepté car il n'effectue pas tout ce qu'un formateur de code pourrait gérer. It just re-
indents

1
Bon conseil. Extra boiteux que XCode n'a pas cela.
AndrewK

4
oui @ powerj1984. Je suis également déçu de cela. Il n'ajoute pas d' espaces appropriés après ,, =ou d' autres opérateurs. Ce qu'il fait juste l'intention. Rien d'autre. Mac a vraiment besoin d'apprendre de Microsoft ici.
shashwat

35

J'aimerais recommander deux options à considérer. À la fois tout à fait nouveau et en évolution.

ClangFormat-Xcode (gratuit) - sur chaque fichier cmd + s est reformaté selon un style spécifique et enregistré, facile à déployer au sein de l'équipe

Un plug-in Xcode pour formater votre code à l'aide des outils de formatage de Clang, par @travisjeffery.

Avec clang-format, vous pouvez utiliser Clang pour formater votre code dans des styles tels que LLVM, Google, Chromium, Mozilla, WebKit ou votre propre configuration.

Objective-Clean (payé, je ne l'ai pas encore essayé) - l'application générant des erreurs de construction si les règles de style prédéfinies sont violées - peut-être assez difficile à utiliser au sein de l'équipe, donc je ne l'ai pas essayé.

Avec une configuration très minimale, vous pouvez demander à Xcode d'utiliser notre application pour appliquer vos règles. Si jamais vous êtes surpris en train de violer l'une de vos règles, Xcode lancera une erreur de construction et vous mènera directement à la ligne incriminée.


Comment créez-vous votre propre configuration de format avec ce plugin?
nbro

27

Dans xcode, vous pouvez utiliser ce raccourci pour ré-indenter votre code source

Accédez au fichier, qui a des problèmes de retrait, et suivez ceci:

  • Cmd+ Apour sélectionner tous les codes sources

  • Ctrl+ Ipour ré-indenter

J'espère que cela t'aides.


18

Mon favori personnel, PrettyC wantabe, est uncrustify: http://uncrustify.sourceforge.net/ . Il a cependant quelques milliards d'options, donc je vous suggère également de télécharger UniversalIndentGUI_macx, (également sur sourceforge) une interface graphique que quelqu'un a écrite pour vous aider à définir les options comme vous les aimez.

Vous pouvez ensuite ajouter ce script utilisateur personnalisé pour décroiser le texte sélectionné:

#! /bin/sh
#
# uncrustify!
echo -n "%%%{PBXSelection}%%%"
/usr/local/bin/uncrustify -q -c /usr/local/share/uncrustify/geo_uncrustify.cfg -l oc+ <&0
echo -n "%%%{PBXSelection}%%%"

J'ai eu des problèmes avec uncrustify, en particulier avec les blocs de formatage.
Liron Yahdav

12

Vous pouvez utiliser Command+ Apour sélectionner tout le contenu et suivant Ctrl+ Ipour formater le contenu sélectionné.


9

Je pense également que xcode devrait avoir cette fonction. J'ai donc fait une extension pour le faire: Swimat

Installation simple par brew cask install swimat Aperçu

Vous pouvez l'essayer, voir https://github.com/Jintin/Swimat pour plus d'informations.


8

Cmd A + Ctrl I

Ou Cmd AEt puis clic droit . Aller à la structure -> Ré-indenter


6

Pensez à vous acheter une licence pour AppCode , un IDE Objective-C intelligent qui aide les développeurs iOS / OS X. AppCode est entièrement compatible avec Xcode, mais va au-delà de Xcode en ajoutant des fonctionnalités puissantes .

AppCode une variante Objective-C de Intellij IDEA IDE de JetBrains . Ils sont également les auteurs de la populaire extension ReSharper de Visual Studio, dont le but principal semble être une tentative désespérée d'apporter une touche d'expérience IDEA à un produit Microsoft.

AppCode utilise son propre analyseur de code qui offre un refactoring et une navigation de code presque parfaits. Il est également possible de ré-indenter et de reformater complètement le code (bien que je manque encore quelques paramètres de formatage dans les cas difficiles, mais cela fonctionne généralement bien).

Vous pouvez bien sûr essayer la version d'essai.



4

Vous pouvez essayer ce plugin XCode https://github.com/benoitsan/BBUncrustifyPlugin-Xcode

Clonez simplement le référentiel github, ouvrez le projet de plugin dans XCode et exécutez-le. Il sera installé automatiquement. Redémarrez Xode avant d'utiliser le plugin du formateur.

N'oubliez pas d'installer uncrustify util avant. Homebrew, par exemple

brew install uncrustify

PS Vous pouvez activer la fonction «après l'enregistrement du formatage» dans Édition> Format du code> Préférences BBUncrustifyPlugin> Format lors de l'enregistrement

J'espère que cela vous sera utile ;-)



3

CTRL + i

c'est tout.

(non COMMAND+ i)


6
Cela a déjà été mentionné comme réponse 4 fois - veuillez lire les autres réponses avant de répondre.
fishinear

En outre, CMD + i équivaut à accéder à Produit -> Profil, ce qui n'est pas la même chose que le formatage.
inga

3

Je suggère d'utiliser ClangFormat. Pour installer, veuillez suivre ces étapes:

  1. Installez le gestionnaire de packages Alcatraz pour XCode Prend en charge Xcode 5+ et OS X 10.9+
  2. Après l'installation, redémarrez XCode.
  3. Ouvrez XCode -> Menu Fenêtre -> Gestionnaire de package
  4. Recherchez (trouvez) ClangFormat et installez-le. Après l'installation, redémarrez XCode.
  5. Maintenant, dans le menu XCode, vous pouvez utiliser le sous-menu Edit -> Clang Format pour le formatage.

Vous pouvez choisir différents types de formatage. De plus, en activant le formatage lors de l'enregistrement, vous pouvez obtenir une capacité de formatage automatique.

entrez la description de l'image ici


1
Ce n'est plus disponible sur XCode 8+
Nathan F.

Oui, vous avez raison @NathanFiscaletti J'ai mis à niveau de la version 7.2 à 9.2 et plus la solution ne fonctionne plus. Mais j'ai trouvé une solution. Je vais ajouter un nouveau message!
csonuryilmaz

J'ai installé Alcatraz mais le plugin ClangFormat n'est plus pris en charge sur Xcode 9. github.com/travisjeffery/ClangFormat-Xcode/issues/129
csonuryilmaz

1

Si votre Xcode version 3.x, vous devez utiliser "User Script" avec Uncrustify , voici un exemple:

#!/bin/sh

echo -n "%%%{PBXSelection}%%%"
$YOURPATH_TO_UNCRUSTIFY/uncrustify -q -c $YOURPATH_TO_UNCRUSTIFY_CONFIG/CodeFormatConfig.cfg -l OC+
echo -n "%%%{PBXSelection}%%%"

ajoutez ci-dessus à votre "User Script" Xcode.

si Xcode version 4.x, je pense que vous devriez lire ce blog: Formatage de code dans Xcode 4 ,

De cette façon, utilisé les "Services Apple", mais ce n'est pas assez bon, cause une expérience trop lente, est-ce que quelqu'un a la même chose?

pourquoi apple drop "user script" .... xD


1

Tout d'abord, examinez la section "Indentation" des préférences XCode. Vous pouvez personnaliser un peu les choses là-bas ...

Pour un contrôle plus précis, reportez-vous au document XCode User Defaults d'Apple. (Peut nécessiter une connexion de développeur pour afficher). Par exemple, j'ai pu désactiver le "retrait lors du collage" en entrant ce qui suit dans le terminal:

defaults write com.apple.XCODE PBXIndentOnPaste No

pour relire votre réglage:

defaults read com.apple.XCODE PBXIndentOnPaste

1

Cela ne fonctionne que pour les langues qui ne sont pas délimitées par des espaces, mais ma solution est de supprimer tous les espaces à l'exception des espaces, puis d'ajouter une nouvelle ligne après les caractères qui délimitent généralement EOL (par exemple, remplacer ';' par '; \ n') puis faire l'omniprésence ^ + i solution.

J'utilise Python.

Exemple de code, remplacez simplement les noms de fichiers:

python -c "import re; open(outfile,'w').write(re.sub('[\t\n\r]','',open(infile).read()).replace(';',';\n').replace('{','{\n').replace('}','}\n'))"

Ce n'est pas parfait (exemple: pour les boucles), mais j'aime ça.


1

Nous pouvons utiliser Xcode Formatter qui utilise uncrustify pour formater facilement votre code source comme votre équipe le souhaite exactement !.

Installation La méthode recommandée est de cloner le projet GitHub ou de le télécharger à partir de https://github.com/octo-online/Xcode-formatter et d'ajouter le répertoire CodeFormatter dans votre projet Xcode pour obtenir: Formatage de code basé sur les raccourcis Xcode: un raccourci vers formater les sources modifiées dans l'espace de travail actuel formatage automatique du code: ajoutez une phase de construction à votre projet pour formater les sources actuelles lorsque l'application construit toutes les sources formatage: formatez tout votre code avec une ligne de commande vos règles de mise en forme partagées par projet: éditez et utilisez une même configuration fichier avec l'équipe de développement de votre projet 1) Comment configurer le formateur de code pour votre projet Installer uncrustify Le moyen le plus simple est d'utiliser brew: $ brew install uncrustify

Pour installer brew: $ ruby ​​–e «$ (curl –fsSkl raw.github.com/mxcl/homebrew/go)»

Vérifiez que uncrustify est situé dans / usr / local / bin $ qui uncrustify

Si votre version décroissante est inférieure à 0.60, vous devrez peut-être l'installer manuellement car la syntaxe Objective-C moderne a été ajoutée récemment. Ajoutez le répertoire CodeFormatter à côté de votre fichier .xcodeproj

Vérifiez que votre application Xcode s'appelle «Xcode» (nom par défaut). Vous pouvez voir ce nom dans le répertoire Applications / (ou dans votre répertoire d'installation Xcode personnalisé). Attention si vous avez plusieurs instances de Xcode sur votre mac: assurez-vous que celle du projet est bien nommée "Xcode"! (Pourquoi cela? Ce nom est utilisé pour rechercher les fichiers Xcode actuellement ouverts. Voir CodeFormatter / Uncrustify_opened_Xcode_sources.workflow appleScript). Installez le service d'automatisme Uncrustify_opened_Xcode_sources.workflow Copiez ce fichier dans votre dossier ~ / Library / Services / (créez ce dossier si besoin). Attention: en double-cliquant sur le fichier .workflow, vous l'installez mais le fichier sera supprimé! Assurez-vous d'en laisser une copie aux autres utilisateurs.

Comment formater les fichiers ouverts lors de la construction du projet Ajouter une phase de construction "run script" contenant la ligne suivante:

sh CodeFormatter / scripts / formatOpendSources.sh

Comment formater des fichiers en ligne de commande

Pour formater les fichiers actuellement ouverts, utilisez formatOpenedSources.sh:

$ sh CodeFormatter / scripts / formatOpendSources.sh

Pour formater tous les fichiers, utilisez formatAllSources.sh:

$ sh CodeFormatter / scripts / formatAllSources.sh CHEMIN

PATH doit être remplacé par le chemin de vos sources.

Par exemple; si le nom du projet est TestApp, la commande sera

$ sh CodeFormatter / scripts / formatAllSources.sh TestApp

il recherchera tous les fichiers du projet et formatera tous les fichiers comme configuré dans le fichier uncrustify_objective_c.cfg.

Comment modifier les règles du formateur

Modifier CodeFormatter / uncrustify_objective_c.cfg ouvert avec TextEdit


0

Eh bien, je cherchais un moyen facile. Et découvrez sur support .

Copiez d'abord le texte json et validez-le sur jsonlint ou quelque chose de similaire. Ensuite, pour copier depuis jsonlint, le json est déjà formaté. Et collez le code sur Xcode en préservant le format, raccourci shift+ option+ command+v


-1

Vous pouvez voir et modifier n'importe quel raccourci sur ce chemin: Xcode -> Préférences -> Raccourcis clavier.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.