1

Je suis en train de trouver toutes si les déclarations où les accolades sont écrites dans une nouvelle ligne en utilisant la recherche suivante et remplacer modèle:Comment éliminer les 'accolades sur une nouvelle ligne' en utilisant la recherche Intellij et remplacer le motif?

modèle de recherche:

if ($Expr$) 
{ 
    $ThenStatements$; 
} 
else 
{ 
    $ElseStatements$; 
} 

Remplacer modèle:

if ($Expr$) { 
    $ThenStatements$; 
} 
else { 
    $ElseStatements$; 
} 

Le problème auquel je suis confronté si le moteur de gabarit ne fait pas la différence entre les deux gabarits. Il me propose de remplacer le gabarit de recherche par le bon, mais il détecte également les gabarits «corrects» comme défectueux.

Y at-il un moyen de contourner cela en utilisant une sorte d'expression régulière?

Éditer: Travailler sur Android Studio. J'essaie de générer un ensemble de règles de charpie pour mes entreprises Code Conventions de style qui apparaîtront comme des avertissements ou des erreurs

Répondre

1

Recherche structurelle & Remplacer est conçu pour la recherche de code, peu importe comment il est formaté. Votre utilisation n'est donc pas vraiment supportée. Cependant, avec un peu de hack, il est possible d'obtenir ce que vous voulez en sortir.

Commencez avec votre modèle de recherche et ajouter les contraintes de script Groovy suivants à la variable $Expr$:

import com.intellij.psi.* 
import com.intellij.openapi.editor.Document 

PsiDocumentManager dm = PsiDocumentManager.getInstance(__context__.project) 
Document d = dm.getDocument(__context__.containingFile) 
PsiIfStatement is = __context__.parent 
if (is.thenBranch != null && is.thenBranch.text.startsWith("{")) { 
    if (d.getLineNumber(is.thenBranch.textOffset) > d.getLineNumber(is.RParenth.textOffset)) 
    return true 
} 
if (is.elseBranch != null && is.elseBranch.text.startsWith("{")) { 
    if (d.getLineNumber(is.elseBranch.textOffset) > d.getLineNumber(is.elseElement.textOffset)) 
    return true; 
} 
return false 

Ce script vérifie si la branche puis { est sur une ligne supérieure à la ) de l'instruction if, ou si la branche else { est sur une ligne supérieure au mot clé else ou renvoie false dans le cas contraire.

4

Je crois que le bon outil pour le travail est le formateur de code.

Je présume que c'est Java dont nous parlons.

Réglez les paramètres de formatter:

  • allez dans Paramètres -> Editeur -> Style Code -> Java -> (onglet) Emballage et croisillons
  • régler l'élément Accolades Placement/Autres à: Fin de ligne
  • vérifier l'aperçu si son paramètre que vous voulez
  • cliquez sur OK

Format (tous) le code:

  • sélectionnez le package racine
  • cliquez sur Alt + L (Menu: Code -> Code de reformater)
  • la boîte de dialogue Code de reformater, cliquez sur OK

Tout le code doit être reformaté selon aux règles.

+0

L'outil de formatage est génial. Mais je ne suis pas sûr C'est ce que je cherche.J'essaye de générer un ensemble de règles de charpie qui apparaîtront comme des marqueurs d'avertissement/d'erreur dans la gouttière des IDE. –

+1

Votre problème semble être un problème de formatage, pas un problème d'analyse de code statique (pour lequel la fibre est principalement utilisée). Vous ne voulez pas changer le code pour améliorer la mise en forme, mais seulement vouloir signaler le problème? –

+0

J'ai pensé appliquer nos conventions de code avec de la fibre. Le formatage réglerait les problèmes une fois, mais permettrait toujours le code «mauvais» à commettre. –