Le même problème existait en mode csharp jusqu'à la semaine dernière. La façon dont je l'ai réparé était d'ajouter un nouveau matcher dans le paramètre c-basic-matchers-after
pour le langage csharp. Le nouveau matcher ressemble à ceci:
;; Case 2: declaration of enum with or without an explicit base type
,@(when t
`((,(byte-compile
`(lambda (limit)
(let ((parse-sexp-lookup-properties
(cc-eval-when-compile
(boundp 'parse-sexp-lookup-properties))))
(while (re-search-forward
,(concat csharp-enum-decl-re
"[ \t\n\r\f\v]*"
"{")
limit t)
(unless
(progn
(goto-char (match-beginning 0))
(c-skip-comments-and-strings limit))
(progn
(save-match-data
(goto-char (match-end 0))
(c-put-char-property (1- (point))
'c-type
'c-decl-id-start)
(c-forward-syntactic-ws))
(save-match-data
(c-font-lock-declarators limit t nil))
(goto-char (match-end 0))
)
)))
nil))
)))
où csharp-enum-decl-re
est défini comme
(defconst csharp-enum-decl-re
(concat
"\\<enum[ \t\n\r\f\v]+"
"\\([[:alpha:]_][[:alnum:]_]*\\)"
"[ \t\n\r\f\v]*"
"\\(:[ \t\n\r\f\v]*"
"\\("
(c-make-keywords-re nil
(list "sbyte" "byte" "short" "ushort" "int" "uint" "long" "ulong"))
"\\)"
"\\)?")
"Regex that captures an enum declaration in C#"
)
Ce que cela n'est défini une propriété de texte sur l'accolade ouverte après une ligne de déclaration enum. Cette propriété de texte indique à cc-mode de mettre différemment le contenu de la liste des accolades. Comme une "liste de protection". La définition de cette propriété obtient brace-list-open
sur la ligne suivante.
Peut-être que quelque chose de similaire fonctionnera pour vous.
Vous pouvez personnaliser vous-même les coupleurs pour java, avec quelque chose comme ça, et si vous ouvrez un bug, vous pouvez le soumettre comme solution suggérée.
En C#, les enums peuvent dériver de n'importe quel type entier. donc,
public enum MyEnumType : uint
{
ONE = 1,
TWO,
THREE,
}
Je pense que dans Java il n'y a pas une telle possibilité. Si c'est le cas, l'expression rationnelle Java serait beaucoup plus simple que l'expression rationnelle que j'ai utilisée pour C#.
Oups! Il me vient à l'esprit qu'avec la syntaxe simplifiée de Java, il est également possible que vous puissiez activer les listes d'accolades, simplement en définissant le mot-clé enum dans la bonne constante de langue. Si tel est le cas, alors la solution pour vous pourrait être aussi simple que:
(c-lang-defconst c-inexpr-brace-list-kwds
java '("enum"))
Cela ne fonctionne pas pour C# en raison de sa syntaxe plus complexe.
EDIT - pas qui ne fonctionne pas. C'est plus compliqué que ça.
Bogue transmis via Emacs. Nous verrons ce qui se passe, je suppose. – Masterofpsi
oui, il est aussi étonnant que le support d'emacs pour Java soit arrêté, quoi, 2003? – Cheeso
J'ai travaillé sur le support de Java, en fait - je viens de terminer (je pense) tout, donc il devrait être vérifié en mode CC très bientôt. C'est l'un des problèmes qu'il a résolus. –