File: Diagnostics.xml

package info (click to toggle)
openclonk 8.1-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 169,656 kB
  • sloc: cpp: 180,484; ansic: 108,988; xml: 31,371; python: 1,223; php: 767; makefile: 148; sh: 101; javascript: 34
file content (251 lines) | stat: -rw-r--r-- 8,124 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE doc
  SYSTEM '../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../clonk.xsl"?>
<doc>
  <title>Diagnostic Messages</title>
  <h>Diagnostic Messages</h>
  <part>
    <text>
      Certain constructs may be flagged by the engine as potentially
      unintended or deprecated. In these cases, the engine will, by default,
      emit a warning to the log file.
    </text>
    <text>
      On occasion, these constructs are in fact intended by the script
      author. In order to avoid unwanted warning messages hiding more important
      messages, the engine supports selectively suppressing a warning category
      for parts of a script.
    </text>
  </part>
  <part>
    <text>
      Suppression and re-enablement is handled by the <code>#warning</code>
      directive. The directive must be placed on a separate line.
    </text>
    <text>Warnings can be controlled using this syntax:</text>
    <code>#warning {enable|disable} [warning_category [warning_category...]]</code>
    <text>
      If no category is given, the engine will suppress or enable all messages,
      including those that are not enabled by default. A category remains
      disabled or enabled until the next directive that affects it, or until
      the end of the script. A script linked to via the <code>#include</code>
      or <code>#appendto</code> directives does not affect, and is itself not
      affected by, the warning settings of the current script.
    </text>
    <text>
      It is not an error to specify a category that does not exist; the
      invalid category is simply ignored. No separate warning is emitted.
    </text>
  </part>
  <part>
    <h>Warning Categories</h>
    <text>The following warning categories currently exist:</text>
    <table>
      <rowh>
        <col>Category</col>
        <col>Description</col>
      </rowh>
      <row>
        <col>invalid_escape_sequence</col>
        <col>
          <text>
            The engine found an escape sequence inside a string that it
            did not recognize.
          </text>
          <part><code>"\p"</code></part>
        </col>
      </row>
      <row>
        <col>invalid_hex_escape</col>
        <col>
          <text>
            The engine found the start of a hexadecimal escape sequence
            inside a string, but no hexadecimal digits followed it.
          </text>
          <part><code>"\xGN"</code></part>
        </col>
      </row>
      <row>
        <col>type_name_used_as_par_name</col>
        <col>
          <text>
            A function parameter was declared without an explicit type
            specification, but with a name that is the same as a built-in type.
          </text>
          <part><code>func f(array)</code></part>
          <text>
            This warning is not enabled by default.
            <a href="#fn1" title="The warning may be enabled by default in a future version.">¹</a>
          </text>
        </col>
      </row>
      <row>
        <col>empty_parameter_in_call</col>
        <col>
          <text>
            In a function call, a parameter was left empty. The engine is
            passing <code>nil</code> in its place.
          </text>
          <part><code><funclink>CreateObject</funclink>(Clonk,, 30, 100);</code></part>
          <text>
            This warning is not enabled by default.
            <a href="#fn1" title="The warning may be enabled by default in a future version.">¹</a>
          </text>
        </col>
      </row>
      <row>
        <col>empty_parameter_in_array</col>
        <col>
          <text>
            In an array literal, an entry was left empty. The engine is
            using <code>nil</code> in its place.
          </text>
          <part><code>[1, 2,, 3, 4]</code></part>
          <text>
            This warning is not enabled by default.
            <a href="#fn1" title="The warning may be enabled by default in a future version.">¹</a>
          </text>
        </col>
      </row>
      <row>
        <col>implicit_range_loop_var_decl</col>
        <col>
          <text>
            The loop variable of a for-in loop was not declared either in the
            loop header itself nor in the containing function. This is only
            accepted for backwards compatibility and may be removed in a
            future release. Explicitly declare the variable by adding the
            <code>var</code> keyword.
          </text>
          <part>
            <code>func f() {
&#9;for (i in [1, 2, 3]) {
&#9;}
}</code>
          </part>
        </col>
      </row>
      <row>
        <col>non_global_var_is_never_const</col>
        <col>
          <text>
            A variable has been declared as <code>const</code>, but is not
            global. At this time, non-global variables are always mutable.
          </text>
          <part>
            <code>const local a = {}</code>
          </part>
        </col>
      </row>
      <row>
        <col>variable_shadows_variable</col>
        <col>
          <text>
            The declaration of a variable uses the same name as a variable
            in a greater scope. Changes to the shadowing variable will not
            affect the shadowed variable.
          </text>
          <part>
            <code>static foo;
func f() {
&#9;var foo = 3;
}</code>
          </part>
        </col>
      </row>
      <row>
        <col>redeclaration</col>
        <col>
          <text>
            A variable has been redeclared in the same scope. Make sure
            you do not accidentally overwrite values another part of the
            code relies upon.
          </text>
          <part>
            <code>func f() {
&#9;var i;
&#9;var i;
}</code>
          </part>
        </col>
      </row>
      <row>
        <col>undeclared_varargs</col>
        <col>
          <text>
            Use of <code><funclink>Par</funclink></code> inside a function
            implicitly declares it as using a variable number of arguments.
            This is not immediately obvious to callers of the function, and
            should be explicitly declared in the function signature by
            adding a final <code>...</code> parameter.
          </text>
          <part>
            <code>func f(a) {
&#9;return <funclink>Par</funclink>(a);
}
// Better:
func g(a, ...) {
&#9;return <funclink>Par</funclink>(a);
}</code>
          </part>
        </col>
      </row>
      <row>
        <col>arg_count_mismatch</col>
        <col>
          <text>
            A function call passes more parameters than the function will
            accept.
          </text>
          <part>
            <code><funclink>GetDir</funclink>(0)</code>
          </part>
        </col>
      </row>
      <row>
        <col>arg_type_mismatch</col>
        <col>
          <text>
            The parameter given in a function call is of a different type
            than the called function expects. The call will likely fail at
            runtime.
          </text>
          <part>
            <code><funclink>Sin</funclink>("huh?")</code>
          </part>
        </col>
      </row>
      <row>
        <col>empty_if</col>
        <col>
          <text>
            An <code>if</code> conditional is controlling an empty statement.
            Use the empty block <code>{}</code> if this is intentional, or
            remove the conditional entirely.
          </text>
          <part>
            <code>if (true);</code>
          </part>
        </col>
      </row>
    </table>
  </part>

  <part>
    <h>Examples</h>
    <examples>
      <example>
        <code>func f(string s) {
&#9;Sin(s);&#x9;// WARNING: parameter 0 of call to 'Sin' passes string (int expected)
#warning disable arg_type_mismatch
&#9;Sin(s);
#warning enable arg_type_mismatch
&#9;Sin(s);&#x9;// WARNING: parameter 0 of call to 'Sin' passes string (int expected)
}</code>
      </example>
    </examples>
  </part>
  
  <a id="fn1" style="font-size: smaller; color: inherit;">¹ The warning may be enabled by default in a future version.</a>
</doc>