// RUN: clang-tblgen -gen-diag-docs -I%S %s -o - 2>&1 | \ // RUN: FileCheck --strict-whitespace %s include "DiagnosticBase.inc" def MyGroup : DiagGroup<"MyGroupName">; def MyKinds : TextSubstitution<"%select{food|forests}0">; def MyGoodBad : TextSubstitution<"%select{good|bad}0">; def MySubNested : TextSubstitution<"%sub{MyGoodBad}1 %sub{MyKinds}2 are %sub{MyGoodBad}1 according to %0">; // CHECK: -WMyGroupName // CHECK: **Diagnostic text:** let Group = MyGroup in { // CHECK: |:warning:`warning:` |nbsp| :diagtext:`this is my diff text`| // CHECK-NEXT: +-----------------------------------------------------------+ def CheckDiff : Warning<"%diff{$ is not $|this is my diff text}0,1">; // CHECK: |:warning:`warning:` |nbsp| :placeholder:`A` |nbsp| :diagtext:`is my modifier test` |nbsp| :placeholder:`B`| // CHECK-NEXT: +----------------------------------------------------------------------------------------------------------+ def CheckModifier : Warning<"%0 is my modifier test %1">; // CHECK: |:warning:`warning:` |nbsp| :diagtext:`This is the` |nbsp| :placeholder:`A` |nbsp| :diagtext:`test I've written`| // CHECK-NEXT: +---------------------------------------------------------------------------------------------------------------+ def CheckOrdinal : Warning<"This is the %ordinal0 test I've written">; // CHECK: |:warning:`warning:` |nbsp| :diagtext:`I wrote` |nbsp| |+----------------+| |nbsp| :diagtext:`tests`| // CHECK-NEXT: | ||:diagtext:`no` || | // CHECK-NEXT: | |+----------------+| | // CHECK-NEXT: | ||:diagtext:`one` || | // CHECK-NEXT: | |+----------------+| | // CHECK-NEXT: | ||:placeholder:`A`|| | // CHECK-NEXT: | |+----------------+| | // CHECK-NEXT: +------------------------------------------------------+------------------+-------------------------+ def CheckPlural : Warning<"I wrote %plural{0:no|1:one|:%0}0 tests">; // CHECK: |:warning:`warning:` |nbsp| :diagtext:`bad type` |nbsp| :placeholder:`A`| // CHECK-NEXT: +-----------------------------------------------------------------------+ def CheckQ : Warning<"bad type %q0">; // CHECK: |:warning:`warning:` |nbsp| :diagtext:`My test`|+-------------+| |nbsp| :diagtext:`are the best!`| // CHECK-NEXT: | || || | // CHECK-NEXT: | |+-------------+| | // CHECK-NEXT: | ||:diagtext:`s`|| | // CHECK-NEXT: | |+-------------+| | // CHECK-NEXT: +----------------------------------------------+---------------+---------------------------------+ def CheckS : Warning<"My test%s0 are the best!">; // CHECK: |:warning:`warning:` |nbsp| :diagtext:`this is my select test:` |nbsp| |+---------------+| // CHECK-NEXT: | ||:diagtext:`one`|| // CHECK-NEXT: | |+---------------+| // CHECK-NEXT: | ||:diagtext:`two`|| // CHECK-NEXT: | |+---------------+| // CHECK-NEXT: +----------------------------------------------------------------------+-----------------+ def CheckSelect : Warning<"this is my select test: %select{one|two}0 and it is %select{good|bad}1">; // CHECK: +-------------------------------------------------------+------------------+--------+---------------------+-------------------------------+------------------+--------------------------------------------------------+ // CHECK-NEXT: |:warning:`warning:` |nbsp| :diagtext:`They say` |nbsp| |+----------------+| |nbsp| |+-------------------+| |nbsp| :diagtext:`are` |nbsp| |+----------------+| |nbsp| :diagtext:`according to` |nbsp| :placeholder:`D`| // CHECK-NEXT: | ||:diagtext:`good`|| ||:diagtext:`food` || ||:diagtext:`good`|| | // CHECK-NEXT: | |+----------------+| |+-------------------+| |+----------------+| | // CHECK-NEXT: | ||:diagtext:`bad` || ||:diagtext:`forests`|| ||:diagtext:`bad` || | // CHECK-NEXT: | |+----------------+| |+-------------------+| |+----------------+| | // CHECK-NEXT: +-------------------------------------------------------+------------------+--------+---------------------+-------------------------------+------------------+--------------------------------------------------------+ def CheckSubstitution : Warning<"They say %sub{MySubNested}3,1,0">; // CHECK: |:warning:`warning:` |nbsp| :diagtext:`this is my warning text`| // CHECK-NEXT: +--------------------------------------------------------------+ def CheckText : Warning<"this is my warning text">; }