Astuce Eclipse : comment désactiver le formatage localement

Eclipse permet de formater le code source, menu « Source/Format »  ou touche « Ctrl + Shfit + F« . Cella permet homogénéiser le code source et aussi de voir s’il ne contient pas d’erreur (le formatage ne se fait pas, ou ne correspond pas à ce que l’on attend).
Mais il peut arriver que vous ne souhaitiez pas de formatage localement dans votre source.
Par exemple sur le code source suivant :

 
 
public class TestFormatageJava {
  public String toJsonObject(String key, String value) {
    StringBuilder sb = new StringBuilder();
    sb.append("{\"")
      .append(key)
      .append("\":\"")
      .append(value)
      .append("\"}");
    return sb.toString();
  }
}

Une fois formaté avec Eclipse, le source devient :

 
 
public class TestFormatageJava {
  public String toJsonObject(String key, String value) {
    StringBuilder sb = new StringBuilder();
    sb.append("{\"").append(key).append("\":\"").append(value).append("\"}");
    return sb.toString();
  }
}

C’est moins lisible, mais plus compacte !

Pour indiquer à Eclipse de ne pas changer le formatage d’origine il faut :

  • éditer les préférences : menu « Windows/Preferences« 
  • aller dans « JavaCode Style/Formater« 
  • cliquer sur « Edit » (sur la droite)
  • aller sur l’onglet « Off/On Tags » (dernier onglet)
  • puis cliquer sur « Enable Off/On Tags »
    Eclipse preference formatage
  • puis dans votre source, devant l’emplacement ou le formatage ne doit pas ce faire, ajouter le commentaire :
     
     
    // @formatter:off
  • puis ajouter en fin :
     
     
    //@formatter:on
  • Formater votre code , menu « Source/Format »  ou touche « Ctrl + Shfit + F« 

Le code sera formaté, sauf entre les deux directives « @formatter« , ce qui donne :

 
 
public class TestFormatageJava {
  public String toJsonObject(String key, String value) {
    StringBuilder sb = new StringBuilder();
    // @formatter:off
    sb.append("{\"")
      .append(key)
      .append("\":\"")
      .append(value)
      .append("\"}");
    //@formatter:on
    return sb.toString();
  }
}

Bien sûre, ce genre de directive n’est à utiliser qu’avec parcimonie 😉