| # Tint diagnostic style guide | 
 |  | 
 | This guide provides a set of best practices when writing code that emits | 
 | diagnostic messages in Tint. These diagnostics are messages presented to the | 
 | user in case of error or warning. | 
 |  | 
 | The goal of this document is to have our diagnostic messages be clear and | 
 | understandable to our users, so that problems are easy to fix, and to try and | 
 | keep a consistent style. | 
 |  | 
 | ## Message style | 
 |  | 
 | * Start diagnostic messages with a lower-case letter | 
 | * Try to keep the message to a single sentence, if possible | 
 | * Do not end the message with punctuation (full stop, exclamation mark, etc) | 
 |  | 
 | **Don't:** | 
 |  | 
 | ``` | 
 | shader.wgsl:7:1 error: Cannot take the address of expression. | 
 | ``` | 
 |  | 
 | **Do:** | 
 |  | 
 | ``` | 
 | shader.wgsl:7:1 error: cannot take the address of expression | 
 | ``` | 
 |  | 
 | **Justification:** | 
 |  | 
 | Succinct messages are more important than grammatical correctness. \ | 
 | This style matches the style found in most other compilers. | 
 |  | 
 | ## Prefer to use a `Source` location instead of quoting the code in the message | 
 |  | 
 | **Don't:** | 
 |  | 
 | ``` | 
 | shader.wgsl:5:7 error: cannot multiply 'expr_a * expr_b' with types i32 and f32 | 
 |  | 
 | var res : f32 = expr_a * expr_b | 
 |                 ^^^^^^^^^^^^^^^ | 
 | ``` | 
 |  | 
 | **Do:** | 
 |  | 
 | ``` | 
 | shader.wgsl:5:7 error: cannot multiply types i32 and f32 | 
 |  | 
 | var res : f32 = expr_a * expr_b | 
 |                 ^^^^^^^^^^^^^^^ | 
 | ``` | 
 |  | 
 | **Justification:** | 
 |  | 
 | The highlighted line provides even more contextual information than the quoted | 
 | source, and duplicating this information doesn't provide any more help to the | 
 | developer. \ | 
 | Quoting single word identifiers or keywords from the source is not discouraged. | 
 |  | 
 | ## Use `note` diagnostics for providing additional links to relevant code | 
 |  | 
 | **Don't:** | 
 |  | 
 | ``` | 
 | shader.wgsl:5:11 error: type cannot be used in address space 'storage' as it is non-host-shareable | 
 |  | 
 |     cond : bool; | 
 |            ^^^^ | 
 | ``` | 
 |  | 
 | **Do:** | 
 |  | 
 | ``` | 
 | shader.wgsl:5:11 error: type cannot be used in address space 'storage' as it is non-host-shareable | 
 |  | 
 |     cond : bool; | 
 |            ^^^^ | 
 |  | 
 | shader.wgsl:8:4 note: while instantiating variable 'StorageBuffer' | 
 |  | 
 | var<storage> sb : StorageBuffer; | 
 |              ^^ | 
 | ``` | 
 |  | 
 | **Justification:** | 
 |  | 
 | To properly understand some diagnostics requires looking at more than a single | 
 | line. \ | 
 | Multi-source links can greatly reduce the time it takes to properly | 
 | understand a diagnostic message. \ | 
 | This is especially important for diagnostics raised from complex whole-program | 
 | analysis, but can also greatly aid simple diagnostics like symbol collision errors. | 
 |  | 
 | ## Use simple terminology | 
 |  | 
 | **Don't:** | 
 |  | 
 | ``` | 
 | shader.wgsl:7:1 error: the originating variable of the left-hand side of an assignment expression must not be declared with read access control. | 
 | ``` | 
 |  | 
 | **Do:** | 
 |  | 
 | ``` | 
 | shader.wgsl:7:1 error: cannot assign to variable with read access control | 
 |  | 
 | x.y = 1; | 
 | ^^^^^^^ | 
 |  | 
 | shader.wgsl:2:8 note: read access control declared here | 
 |  | 
 | var<storage, read> x : i32; | 
 |              ^^^^ | 
 | ``` | 
 |  | 
 | **Justification:** | 
 |  | 
 | Diagnostics will be read by Web developers who may not be native English | 
 | speakers and are unlikely to be familiar with WGSL specification terminology. | 
 | Too much technical jargon can be intimidating and confusing. \ | 
 | Diagnostics should give enough information to explain what's wrong, and most | 
 | importantly, give enough information so that a fix actionable. | 
 |  | 
 | **Caution:** Be careful to not over simplify. Use the specification terminology | 
 | if there's potential ambiguity by not including it. |