| // All of these cases should produce IJ highlights where marked. |
| library highlighting.test; |
| |
| const string bad_single_char_escape = "\q"; |
| const string bad_octal = "octal \01"; |
| const string bad_hex = "\x1 hex"; |
| const string bad_unicode_32 = "\u1234\u12"; |
| const string bad_unicode_64 = "\U1234\U12345678"; |
| |
| // Second `flexible` should be flagged. |
| type FlexibleCantRepeat = flexible flexible enum { |
| FOO = 1; |
| }; |
| |
| // Second `strict` should be flagged. |
| type StrictCantRepeat = strict strict enum { |
| FOO = 1; |
| }; |
| |
| // `flexible` should be flagged. |
| type StrictnessCantRepeat = strict flexible bits { |
| FOO = 1; |
| }; |
| |
| // Second `resource` should be flagged. |
| type ResourceCantRepeat = resource resource struct {}; |
| |
| // `resource` should be flagged. |
| type BitsCantBeResource = resource bits { |
| FOO = 1; |
| }; |
| |
| // `resource` should be flagged. |
| type EnumCantBeResource = resource enum { |
| FOO = 1; |
| }; |
| |
| // `flexible` should be flagged. |
| type StructCantHaveStrictness = flexible struct {}; |
| |
| // `strict` should be flagged. |
| type TableCantHaveStrictness = strict table {}; |
| |
| // `@foo` should be flagged. |
| type ReservedCantHaveAttribute = flexible union { |
| 1: u1 bool; |
| @foo |
| 2: reserved; |
| }; |
| |
| // `FOO = 0.1` should be flagged. |
| type BitsNotIntegral = strict bits { |
| FOO = 0.1; |
| }; |
| |
| // `FOO = 0.1` should be flagged. |
| type EnumNotIntegral = strict enum { |
| FOO = 0.1; |
| }; |
| |
| // `FOO = 3` should be flagged. |
| type BitsNotPowerOfTwo = flexible bits { |
| FOO = 3; |
| }; |
| |
| // FOO = 2048 should be flagged. |
| type TooBigEnumValue = strict enum : uint8 { |
| FOO = 2048; |
| }; |
| |
| // `int8` should be flagged. |
| type BitsSubtypeNotUnsignedIntegral = flexible bits : int8 { |
| FOO = 1; |
| }; |
| |
| // `bool` should be flagged. |
| type EnumSubtypeNotIntegral = flexible enum : bool { |
| FOO = 1; |
| }; |