]> granicus.if.org Git - clang/commit
Add the concept of "modifiers" to the clang diagnostic format
authorChris Lattner <sabre@nondot.org>
Fri, 21 Nov 2008 07:50:02 +0000 (07:50 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 21 Nov 2008 07:50:02 +0000 (07:50 +0000)
commitaf7ae4e8160fc5c23e471f2125b3fe5911e3532a
treef7b29cd77679ac1df149d78748326f436c87a438
parent3528d3552c309c37e6724b4c4f512290c276f534
Add the concept of "modifiers" to the clang diagnostic format
strings.  This allows us to have considerable flexibility in how
these things are displayed and provides extra information that
allows us to merge away diagnostics that are very similar.

Diagnostic modifiers are a string of characters with the regex
[-a-z]+ that occur between the % and digit.  They may
optionally have an argument that can parameterize them.

For now, I've added two example modifiers.  One is a very useful
tool that allows you to factor commonality across diagnostics
that need single words or phrases combined.  Basically you can
use %select{a|b|c}4 with with an integer argument that selects
either a/b/c based on an integer value in the range [0..3).

The second modifier is also an integer modifier, aimed to help
English diagnostics handle plurality.  "%s3" prints to 's' if
integer argument #3 is not 1, otherwise it prints to nothing.
I'm fully aware that 's' is an English concept and doesn't
apply to all situations (mouse vs mice).  However, this is very
useful and we can add other crazy modifiers once we add support
for polish! ;-)

I converted a couple C++ diagnostics over to use this as an
example, I'd appreciate it if others could merge the other
likely candiates.  If you have other modifiers that you want,
lets talk on cfe-dev.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59803 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Basic/DiagnosticKinds.def
lib/Basic/Diagnostic.cpp
lib/Sema/SemaDeclCXX.cpp