formatage constexpr si en mode c ++

10

J'ai récemment commencé à utiliser C ++ 17, qui apporte constexpr if. Cela fausse cependant l' c++-modeindentation par défaut de s.

// emacs 25.3.2 with --no-init
if constexpr (n == 1) {
    // Why?
  } else if constexpr (n == 2) {
    // This is a mess...
  } else {
  // and it keeps getting weird
}

Est-ce que quelqu'un

  1. Connaissez-vous une alternative plus simple au mode cc?
  2. Vous savez comment résoudre ce problème particulier?
topisani
la source

Réponses:

6

MISE À JOUR: Cette version de prétest que j'ai mise là-bas dans la question d'origine ( emacs-26.0.90.tar.gz) avait un bogue qui provoquait certaines boucles à l'infini lors de l'analyse du tampon, en particulier lors de l'utilisation du <jeton dans des contextes certaing, comme l'écriture <comme premier caractère d'un tampon vide en Java ou C ++ ou après le mot-clé template. Le bug a été corrigé dans la emacs-26branche, c'est donc ce que vous devez télécharger à la place.


Il m'a fallu beaucoup de temps pour trouver la réponse et apprendre à personnaliser le comportement dans le langage elisp mais, une façon de corriger cela est de dire à ce cc-modequi constexprest un "nom de bruit", ce qui signifie qu'il sera traité comme un espace et donc ignoré par l'analyseur.

Le fait est que dans la dernière version stable d'emacs (25.3), la fonction d'ajout de mots parasites n'est pas ajoutée, même lorsqu'elle est dans le référentiel depuis février 2016, vous devez donc télécharger la version non finale.

cd tmp_folder_of_your_choice

sudo apt-get install build-essential # if you don't have it yet
sudo apt-get build-dep emacs24 # get all dependancies to build emacs

# Not this: wget https://github.com/emacs-mirror/emacs/archive/emacs-26.0.90.tar.gz

wget -O emacs-26.zip https://github.com/emacs-mirror/emacs/archive/e8636ac8cc96e1e7e948f04091792da09dafcc76.zip

# or just the last version of the branch, but the exact version I have is the one above
# wget https://github.com/emacs-mirror/emacs/archive/emacs-26.zip

unzip emacs-26.zip
cd emacs-emacs-26

./autogen.sh
./configure
make
sudo make install
emacs ~/.emacs

Et puis, par exemple à la fin du .emacsfichier, ajoutez:

; Load the mode before-hand to make the symbols visible
(require 'cc-mode)
(custom-set-variables '(c-noise-macro-names '("constexpr")))
Peregring-lk
la source
Bien que ce soit génial, et que je l'essaie maintenant, cela ressemble toujours à un hack - existe-t-il une meilleure façon de l'ajouter dans cette seule position syntaxique?
topisani
Je ne sais pas, mais cette solution fonctionne parfaitement pour moi.
Peregring-lk
oui, cela fonctionne pour moi, avec ce projet génial ainsi que le dernier git emacs
topisani
@topisani S'il vous plaît, pourriez-vous voir cette question si la même chose vous arrive après l'installation de la dernière version d'emacs? emacs.stackexchange.com/q/36423/14016
Peregring-lk