@aiready/consistency 0.18.17 → 0.18.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +4 -4
- package/.turbo/turbo-test.log +17 -17
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +866 -0
- package/coverage/coverage-final.json +14 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +146 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/coverage/src/analyzer.ts.html +973 -0
- package/coverage/src/analyzers/index.html +176 -0
- package/coverage/src/analyzers/naming-ast.ts.html +955 -0
- package/coverage/src/analyzers/naming-constants.ts.html +1348 -0
- package/coverage/src/analyzers/naming-generalized.ts.html +352 -0
- package/coverage/src/analyzers/naming.ts.html +325 -0
- package/coverage/src/analyzers/patterns.ts.html +337 -0
- package/coverage/src/index.html +161 -0
- package/coverage/src/index.ts.html +148 -0
- package/coverage/src/provider.ts.html +229 -0
- package/coverage/src/scoring.ts.html +523 -0
- package/coverage/src/utils/ast-parser.ts.html +685 -0
- package/coverage/src/utils/config-loader.ts.html +256 -0
- package/coverage/src/utils/context-detector.ts.html +1057 -0
- package/coverage/src/utils/index.html +161 -0
- package/coverage/src/utils/scope-tracker.ts.html +748 -0
- package/package.json +2 -2
- package/src/__tests__/provider.test.ts +40 -0
|
@@ -0,0 +1,1057 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for src/utils/context-detector.ts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../../index.html">All files</a> / <a href="index.html">src/utils</a> context-detector.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">80.09% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>169/211</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">66.05% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>181/274</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">84.21% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>16/19</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">80.48% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>132/164</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
+
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
+
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
+
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
+
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
+
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
+
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
+
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
+
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
+
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
+
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
+
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
+
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
+
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
+
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
+
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
+
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
+
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
+
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
+
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
+
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
+
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
+
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
+
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
+
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
+
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
+
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
+
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
+
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
+
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
+
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
+
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
+
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
+
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
+
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
+
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
+
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
+
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
+
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
+
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
+
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
+
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
+
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
+
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
+
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
+
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
+
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
+
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
+
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
+
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
+
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
+
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
+
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
+
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
+
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
+
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
+
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
+
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
+
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
+
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
+
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
+
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
+
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
+
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
+
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
+
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
+
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
+
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
+
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
+
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
+
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
+
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
+
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
+
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
+
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
+
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
+
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
+
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
+
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
+
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
+
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
+
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
+
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
+
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
+
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
+
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
+
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
+
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
+
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
+
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
+
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
+
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
+
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
+
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
+
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
+
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
+
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
+
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
+
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
+
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
+
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
+
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
+
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
+
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
+
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
+
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
+
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
+
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
+
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
+
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
+
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
+
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
+
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
+
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
+
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
+
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
+
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
+
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
+
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
+
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
+
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
+
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
+
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
+
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
+
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
+
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
+
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
+
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
+
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
+
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
+
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
+
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
+
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
+
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
+
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
+
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
+
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
+
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
+
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
+
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
+
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
+
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
+
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
+
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
+
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
+
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
+
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
+
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
+
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
+
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
+
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
+
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
+
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
+
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
+
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
+
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
+
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
+
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
+
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
+
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
+
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
+
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
+
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
+
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
+
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
+
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
+
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
+
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
+
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
+
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
+
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
+
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
+
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
+
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
+
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
+
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
+
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
+
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
+
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
+
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
+
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
+
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
+
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
+
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
+
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
+
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
+
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
+
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
+
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
+
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
+
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
+
<a name='L318'></a><a href='#L318'>318</a>
|
|
384
|
+
<a name='L319'></a><a href='#L319'>319</a>
|
|
385
|
+
<a name='L320'></a><a href='#L320'>320</a>
|
|
386
|
+
<a name='L321'></a><a href='#L321'>321</a>
|
|
387
|
+
<a name='L322'></a><a href='#L322'>322</a>
|
|
388
|
+
<a name='L323'></a><a href='#L323'>323</a>
|
|
389
|
+
<a name='L324'></a><a href='#L324'>324</a>
|
|
390
|
+
<a name='L325'></a><a href='#L325'>325</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
391
|
+
<span class="cline-any cline-neutral"> </span>
|
|
392
|
+
<span class="cline-any cline-neutral"> </span>
|
|
393
|
+
<span class="cline-any cline-neutral"> </span>
|
|
394
|
+
<span class="cline-any cline-neutral"> </span>
|
|
395
|
+
<span class="cline-any cline-neutral"> </span>
|
|
396
|
+
<span class="cline-any cline-neutral"> </span>
|
|
397
|
+
<span class="cline-any cline-neutral"> </span>
|
|
398
|
+
<span class="cline-any cline-neutral"> </span>
|
|
399
|
+
<span class="cline-any cline-neutral"> </span>
|
|
400
|
+
<span class="cline-any cline-neutral"> </span>
|
|
401
|
+
<span class="cline-any cline-neutral"> </span>
|
|
402
|
+
<span class="cline-any cline-neutral"> </span>
|
|
403
|
+
<span class="cline-any cline-neutral"> </span>
|
|
404
|
+
<span class="cline-any cline-neutral"> </span>
|
|
405
|
+
<span class="cline-any cline-neutral"> </span>
|
|
406
|
+
<span class="cline-any cline-neutral"> </span>
|
|
407
|
+
<span class="cline-any cline-neutral"> </span>
|
|
408
|
+
<span class="cline-any cline-yes">45x</span>
|
|
409
|
+
<span class="cline-any cline-neutral"> </span>
|
|
410
|
+
<span class="cline-any cline-neutral"> </span>
|
|
411
|
+
<span class="cline-any cline-yes">45x</span>
|
|
412
|
+
<span class="cline-any cline-yes">90x</span>
|
|
413
|
+
<span class="cline-any cline-yes">90x</span>
|
|
414
|
+
<span class="cline-any cline-neutral"> </span>
|
|
415
|
+
<span class="cline-any cline-neutral"> </span>
|
|
416
|
+
<span class="cline-any cline-yes">90x</span>
|
|
417
|
+
<span class="cline-any cline-yes">48x</span>
|
|
418
|
+
<span class="cline-any cline-neutral"> </span>
|
|
419
|
+
<span class="cline-any cline-neutral"> </span>
|
|
420
|
+
<span class="cline-any cline-no"> </span>
|
|
421
|
+
<span class="cline-any cline-yes">42x</span>
|
|
422
|
+
<span class="cline-any cline-yes">3x</span>
|
|
423
|
+
<span class="cline-any cline-neutral"> </span>
|
|
424
|
+
<span class="cline-any cline-yes">45x</span>
|
|
425
|
+
<span class="cline-any cline-yes">84x</span>
|
|
426
|
+
<span class="cline-any cline-neutral"> </span>
|
|
427
|
+
<span class="cline-any cline-neutral"> </span>
|
|
428
|
+
<span class="cline-any cline-neutral"> </span>
|
|
429
|
+
<span class="cline-any cline-yes">42x</span>
|
|
430
|
+
<span class="cline-any cline-neutral"> </span>
|
|
431
|
+
<span class="cline-any cline-neutral"> </span>
|
|
432
|
+
<span class="cline-any cline-yes">87x</span>
|
|
433
|
+
<span class="cline-any cline-yes">48x</span>
|
|
434
|
+
<span class="cline-any cline-yes">87x</span>
|
|
435
|
+
<span class="cline-any cline-yes">45x</span>
|
|
436
|
+
<span class="cline-any cline-yes">39x</span>
|
|
437
|
+
<span class="cline-any cline-yes">45x</span>
|
|
438
|
+
<span class="cline-any cline-neutral"> </span>
|
|
439
|
+
<span class="cline-any cline-neutral"> </span>
|
|
440
|
+
<span class="cline-any cline-yes">24642x</span>
|
|
441
|
+
<span class="cline-any cline-yes">138x</span>
|
|
442
|
+
<span class="cline-any cline-neutral"> </span>
|
|
443
|
+
<span class="cline-any cline-yes">183x</span>
|
|
444
|
+
<span class="cline-any cline-yes">45x</span>
|
|
445
|
+
<span class="cline-any cline-yes">183x</span>
|
|
446
|
+
<span class="cline-any cline-yes">183x</span>
|
|
447
|
+
<span class="cline-any cline-no"> </span>
|
|
448
|
+
<span class="cline-any cline-yes">45x</span>
|
|
449
|
+
<span class="cline-any cline-neutral"> </span>
|
|
450
|
+
<span class="cline-any cline-neutral"> </span>
|
|
451
|
+
<span class="cline-any cline-yes">24687x</span>
|
|
452
|
+
<span class="cline-any cline-yes">24780x</span>
|
|
453
|
+
<span class="cline-any cline-yes">24756x</span>
|
|
454
|
+
<span class="cline-any cline-yes">24780x</span>
|
|
455
|
+
<span class="cline-any cline-yes">24642x</span>
|
|
456
|
+
<span class="cline-any cline-yes">24756x</span>
|
|
457
|
+
<span class="cline-any cline-yes">24780x</span>
|
|
458
|
+
<span class="cline-any cline-neutral"> </span>
|
|
459
|
+
<span class="cline-any cline-neutral"> </span>
|
|
460
|
+
<span class="cline-any cline-yes">24642x</span>
|
|
461
|
+
<span class="cline-any cline-yes">159x</span>
|
|
462
|
+
<span class="cline-any cline-yes">24669x</span>
|
|
463
|
+
<span class="cline-any cline-neutral"> </span>
|
|
464
|
+
<span class="cline-any cline-neutral"> </span>
|
|
465
|
+
<span class="cline-any cline-yes">24642x</span>
|
|
466
|
+
<span class="cline-any cline-yes">24756x</span>
|
|
467
|
+
<span class="cline-any cline-yes">24642x</span>
|
|
468
|
+
<span class="cline-any cline-neutral"> </span>
|
|
469
|
+
<span class="cline-any cline-yes">159x</span>
|
|
470
|
+
<span class="cline-any cline-neutral"> </span>
|
|
471
|
+
<span class="cline-any cline-yes">228x</span>
|
|
472
|
+
<span class="cline-any cline-yes">117x</span>
|
|
473
|
+
<span class="cline-any cline-neutral"> </span>
|
|
474
|
+
<span class="cline-any cline-yes">24657x</span>
|
|
475
|
+
<span class="cline-any cline-neutral"> </span>
|
|
476
|
+
<span class="cline-any cline-neutral"> </span>
|
|
477
|
+
<span class="cline-any cline-yes">49284x</span>
|
|
478
|
+
<span class="cline-any cline-yes">24756x</span>
|
|
479
|
+
<span class="cline-any cline-yes">24792x</span>
|
|
480
|
+
<span class="cline-any cline-yes">24768x</span>
|
|
481
|
+
<span class="cline-any cline-yes">153x</span>
|
|
482
|
+
<span class="cline-any cline-yes">24717x</span>
|
|
483
|
+
<span class="cline-any cline-yes">24642x</span>
|
|
484
|
+
<span class="cline-any cline-neutral"> </span>
|
|
485
|
+
<span class="cline-any cline-yes">159x</span>
|
|
486
|
+
<span class="cline-any cline-neutral"> </span>
|
|
487
|
+
<span class="cline-any cline-neutral"> </span>
|
|
488
|
+
<span class="cline-any cline-yes">45x</span>
|
|
489
|
+
<span class="cline-any cline-neutral"> </span>
|
|
490
|
+
<span class="cline-any cline-neutral"> </span>
|
|
491
|
+
<span class="cline-any cline-neutral"> </span>
|
|
492
|
+
<span class="cline-any cline-yes">159x</span>
|
|
493
|
+
<span class="cline-any cline-neutral"> </span>
|
|
494
|
+
<span class="cline-any cline-neutral"> </span>
|
|
495
|
+
<span class="cline-any cline-neutral"> </span>
|
|
496
|
+
<span class="cline-any cline-neutral"> </span>
|
|
497
|
+
<span class="cline-any cline-yes">48x</span>
|
|
498
|
+
<span class="cline-any cline-neutral"> </span>
|
|
499
|
+
<span class="cline-any cline-yes">24687x</span>
|
|
500
|
+
<span class="cline-any cline-yes">90x</span>
|
|
501
|
+
<span class="cline-any cline-yes">66x</span>
|
|
502
|
+
<span class="cline-any cline-yes">24642x</span>
|
|
503
|
+
<span class="cline-any cline-neutral"> </span>
|
|
504
|
+
<span class="cline-any cline-neutral"> </span>
|
|
505
|
+
<span class="cline-any cline-yes">24666x</span>
|
|
506
|
+
<span class="cline-any cline-yes">24660x</span>
|
|
507
|
+
<span class="cline-any cline-yes">24660x</span>
|
|
508
|
+
<span class="cline-any cline-yes">150x</span>
|
|
509
|
+
<span class="cline-any cline-neutral"> </span>
|
|
510
|
+
<span class="cline-any cline-yes">126x</span>
|
|
511
|
+
<span class="cline-any cline-neutral"> </span>
|
|
512
|
+
<span class="cline-any cline-yes">75x</span>
|
|
513
|
+
<span class="cline-any cline-yes">75x</span>
|
|
514
|
+
<span class="cline-any cline-no"> </span>
|
|
515
|
+
<span class="cline-any cline-neutral"> </span>
|
|
516
|
+
<span class="cline-any cline-neutral"> </span>
|
|
517
|
+
<span class="cline-any cline-yes">453x</span>
|
|
518
|
+
<span class="cline-any cline-neutral"> </span>
|
|
519
|
+
<span class="cline-any cline-yes">303x</span>
|
|
520
|
+
<span class="cline-any cline-neutral"> </span>
|
|
521
|
+
<span class="cline-any cline-neutral"> </span>
|
|
522
|
+
<span class="cline-any cline-yes">24258x</span>
|
|
523
|
+
<span class="cline-any cline-yes">24303x</span>
|
|
524
|
+
<span class="cline-any cline-neutral"> </span>
|
|
525
|
+
<span class="cline-any cline-neutral"> </span>
|
|
526
|
+
<span class="cline-any cline-neutral"> </span>
|
|
527
|
+
<span class="cline-any cline-neutral"> </span>
|
|
528
|
+
<span class="cline-any cline-neutral"> </span>
|
|
529
|
+
<span class="cline-any cline-neutral"> </span>
|
|
530
|
+
<span class="cline-any cline-yes">24303x</span>
|
|
531
|
+
<span class="cline-any cline-yes">24303x</span>
|
|
532
|
+
<span class="cline-any cline-yes">24279x</span>
|
|
533
|
+
<span class="cline-any cline-yes">909x</span>
|
|
534
|
+
<span class="cline-any cline-neutral"> </span>
|
|
535
|
+
<span class="cline-any cline-neutral"> </span>
|
|
536
|
+
<span class="cline-any cline-yes">24282x</span>
|
|
537
|
+
<span class="cline-any cline-yes">327x</span>
|
|
538
|
+
<span class="cline-any cline-yes">327x</span>
|
|
539
|
+
<span class="cline-any cline-yes">24258x</span>
|
|
540
|
+
<span class="cline-any cline-neutral"> </span>
|
|
541
|
+
<span class="cline-any cline-yes">303x</span>
|
|
542
|
+
<span class="cline-any cline-neutral"> </span>
|
|
543
|
+
<span class="cline-any cline-neutral"> </span>
|
|
544
|
+
<span class="cline-any cline-yes">303x</span>
|
|
545
|
+
<span class="cline-any cline-neutral"> </span>
|
|
546
|
+
<span class="cline-any cline-neutral"> </span>
|
|
547
|
+
<span class="cline-any cline-neutral"> </span>
|
|
548
|
+
<span class="cline-any cline-yes">303x</span>
|
|
549
|
+
<span class="cline-any cline-neutral"> </span>
|
|
550
|
+
<span class="cline-any cline-yes">303x</span>
|
|
551
|
+
<span class="cline-any cline-yes">348x</span>
|
|
552
|
+
<span class="cline-any cline-yes">348x</span>
|
|
553
|
+
<span class="cline-any cline-yes">24258x</span>
|
|
554
|
+
<span class="cline-any cline-neutral"> </span>
|
|
555
|
+
<span class="cline-any cline-yes">24303x</span>
|
|
556
|
+
<span class="cline-any cline-yes">24303x</span>
|
|
557
|
+
<span class="cline-any cline-neutral"> </span>
|
|
558
|
+
<span class="cline-any cline-yes">24303x</span>
|
|
559
|
+
<span class="cline-any cline-neutral"> </span>
|
|
560
|
+
<span class="cline-any cline-yes">48900x</span>
|
|
561
|
+
<span class="cline-any cline-neutral"> </span>
|
|
562
|
+
<span class="cline-any cline-neutral"> </span>
|
|
563
|
+
<span class="cline-any cline-yes">25506x</span>
|
|
564
|
+
<span class="cline-any cline-yes">25506x</span>
|
|
565
|
+
<span class="cline-any cline-yes">24561x</span>
|
|
566
|
+
<span class="cline-any cline-yes">24561x</span>
|
|
567
|
+
<span class="cline-any cline-yes">354x</span>
|
|
568
|
+
<span class="cline-any cline-yes">318x</span>
|
|
569
|
+
<span class="cline-any cline-neutral"> </span>
|
|
570
|
+
<span class="cline-any cline-yes">309x</span>
|
|
571
|
+
<span class="cline-any cline-yes">24303x</span>
|
|
572
|
+
<span class="cline-any cline-neutral"> </span>
|
|
573
|
+
<span class="cline-any cline-yes">45x</span>
|
|
574
|
+
<span class="cline-any cline-neutral"> </span>
|
|
575
|
+
<span class="cline-any cline-yes">348x</span>
|
|
576
|
+
<span class="cline-any cline-neutral"> </span>
|
|
577
|
+
<span class="cline-any cline-neutral"> </span>
|
|
578
|
+
<span class="cline-any cline-neutral"> </span>
|
|
579
|
+
<span class="cline-any cline-neutral"> </span>
|
|
580
|
+
<span class="cline-any cline-neutral"> </span>
|
|
581
|
+
<span class="cline-any cline-neutral"> </span>
|
|
582
|
+
<span class="cline-any cline-neutral"> </span>
|
|
583
|
+
<span class="cline-any cline-neutral"> </span>
|
|
584
|
+
<span class="cline-any cline-neutral"> </span>
|
|
585
|
+
<span class="cline-any cline-yes">45x</span>
|
|
586
|
+
<span class="cline-any cline-yes">45x</span>
|
|
587
|
+
<span class="cline-any cline-neutral"> </span>
|
|
588
|
+
<span class="cline-any cline-neutral"> </span>
|
|
589
|
+
<span class="cline-any cline-yes">45x</span>
|
|
590
|
+
<span class="cline-any cline-yes">45x</span>
|
|
591
|
+
<span class="cline-any cline-yes">24x</span>
|
|
592
|
+
<span class="cline-any cline-yes">45x</span>
|
|
593
|
+
<span class="cline-any cline-yes">45x</span>
|
|
594
|
+
<span class="cline-any cline-yes">24642x</span>
|
|
595
|
+
<span class="cline-any cline-neutral"> </span>
|
|
596
|
+
<span class="cline-any cline-neutral"> </span>
|
|
597
|
+
<span class="cline-any cline-yes">24666x</span>
|
|
598
|
+
<span class="cline-any cline-yes">24642x</span>
|
|
599
|
+
<span class="cline-any cline-yes">327x</span>
|
|
600
|
+
<span class="cline-any cline-yes">303x</span>
|
|
601
|
+
<span class="cline-any cline-neutral"> </span>
|
|
602
|
+
<span class="cline-any cline-yes">24x</span>
|
|
603
|
+
<span class="cline-any cline-yes">45x</span>
|
|
604
|
+
<span class="cline-any cline-no"> </span>
|
|
605
|
+
<span class="cline-any cline-yes">69x</span>
|
|
606
|
+
<span class="cline-any cline-neutral"> </span>
|
|
607
|
+
<span class="cline-any cline-yes">45x</span>
|
|
608
|
+
<span class="cline-any cline-yes">69x</span>
|
|
609
|
+
<span class="cline-any cline-yes">51x</span>
|
|
610
|
+
<span class="cline-any cline-neutral"> </span>
|
|
611
|
+
<span class="cline-any cline-neutral"> </span>
|
|
612
|
+
<span class="cline-any cline-neutral"> </span>
|
|
613
|
+
<span class="cline-any cline-yes">18x</span>
|
|
614
|
+
<span class="cline-any cline-no"> </span>
|
|
615
|
+
<span class="cline-any cline-neutral"> </span>
|
|
616
|
+
<span class="cline-any cline-neutral"> </span>
|
|
617
|
+
<span class="cline-any cline-yes">18x</span>
|
|
618
|
+
<span class="cline-any cline-neutral"> </span>
|
|
619
|
+
<span class="cline-any cline-neutral"> </span>
|
|
620
|
+
<span class="cline-any cline-neutral"> </span>
|
|
621
|
+
<span class="cline-any cline-neutral"> </span>
|
|
622
|
+
<span class="cline-any cline-neutral"> </span>
|
|
623
|
+
<span class="cline-any cline-neutral"> </span>
|
|
624
|
+
<span class="cline-any cline-no"> </span>
|
|
625
|
+
<span class="cline-any cline-no"> </span>
|
|
626
|
+
<span class="cline-any cline-no"> </span>
|
|
627
|
+
<span class="cline-any cline-no"> </span>
|
|
628
|
+
<span class="cline-any cline-no"> </span>
|
|
629
|
+
<span class="cline-any cline-neutral"> </span>
|
|
630
|
+
<span class="cline-any cline-neutral"> </span>
|
|
631
|
+
<span class="cline-any cline-no"> </span>
|
|
632
|
+
<span class="cline-any cline-neutral"> </span>
|
|
633
|
+
<span class="cline-any cline-neutral"> </span>
|
|
634
|
+
<span class="cline-any cline-yes">1011x</span>
|
|
635
|
+
<span class="cline-any cline-yes">57x</span>
|
|
636
|
+
<span class="cline-any cline-yes">1011x</span>
|
|
637
|
+
<span class="cline-any cline-neutral"> </span>
|
|
638
|
+
<span class="cline-any cline-neutral"> </span>
|
|
639
|
+
<span class="cline-any cline-yes">954x</span>
|
|
640
|
+
<span class="cline-any cline-yes">954x</span>
|
|
641
|
+
<span class="cline-any cline-no"> </span>
|
|
642
|
+
<span class="cline-any cline-no"> </span>
|
|
643
|
+
<span class="cline-any cline-neutral"> </span>
|
|
644
|
+
<span class="cline-any cline-neutral"> </span>
|
|
645
|
+
<span class="cline-any cline-no"> </span>
|
|
646
|
+
<span class="cline-any cline-no"> </span>
|
|
647
|
+
<span class="cline-any cline-yes">954x</span>
|
|
648
|
+
<span class="cline-any cline-yes">954x</span>
|
|
649
|
+
<span class="cline-any cline-yes">954x</span>
|
|
650
|
+
<span class="cline-any cline-neutral"> </span>
|
|
651
|
+
<span class="cline-any cline-neutral"> </span>
|
|
652
|
+
<span class="cline-any cline-yes">954x</span>
|
|
653
|
+
<span class="cline-any cline-yes">954x</span>
|
|
654
|
+
<span class="cline-any cline-yes">42x</span>
|
|
655
|
+
<span class="cline-any cline-no"> </span>
|
|
656
|
+
<span class="cline-any cline-neutral"> </span>
|
|
657
|
+
<span class="cline-any cline-neutral"> </span>
|
|
658
|
+
<span class="cline-any cline-no"> </span>
|
|
659
|
+
<span class="cline-any cline-no"> </span>
|
|
660
|
+
<span class="cline-any cline-yes">954x</span>
|
|
661
|
+
<span class="cline-any cline-yes">69x</span>
|
|
662
|
+
<span class="cline-any cline-yes">63x</span>
|
|
663
|
+
<span class="cline-any cline-yes">69x</span>
|
|
664
|
+
<span class="cline-any cline-neutral"> </span>
|
|
665
|
+
<span class="cline-any cline-neutral"> </span>
|
|
666
|
+
<span class="cline-any cline-yes">891x</span>
|
|
667
|
+
<span class="cline-any cline-neutral"> </span>
|
|
668
|
+
<span class="cline-any cline-neutral"> </span>
|
|
669
|
+
<span class="cline-any cline-neutral"> </span>
|
|
670
|
+
<span class="cline-any cline-neutral"> </span>
|
|
671
|
+
<span class="cline-any cline-neutral"> </span>
|
|
672
|
+
<span class="cline-any cline-neutral"> </span>
|
|
673
|
+
<span class="cline-any cline-neutral"> </span>
|
|
674
|
+
<span class="cline-any cline-neutral"> </span>
|
|
675
|
+
<span class="cline-any cline-neutral"> </span>
|
|
676
|
+
<span class="cline-any cline-neutral"> </span>
|
|
677
|
+
<span class="cline-any cline-neutral"> </span>
|
|
678
|
+
<span class="cline-any cline-neutral"> </span>
|
|
679
|
+
<span class="cline-any cline-neutral"> </span>
|
|
680
|
+
<span class="cline-any cline-no"> </span>
|
|
681
|
+
<span class="cline-any cline-no"> </span>
|
|
682
|
+
<span class="cline-any cline-neutral"> </span>
|
|
683
|
+
<span class="cline-any cline-neutral"> </span>
|
|
684
|
+
<span class="cline-any cline-neutral"> </span>
|
|
685
|
+
<span class="cline-any cline-no"> </span>
|
|
686
|
+
<span class="cline-any cline-neutral"> </span>
|
|
687
|
+
<span class="cline-any cline-no"> </span>
|
|
688
|
+
<span class="cline-any cline-no"> </span>
|
|
689
|
+
<span class="cline-any cline-neutral"> </span>
|
|
690
|
+
<span class="cline-any cline-neutral"> </span>
|
|
691
|
+
<span class="cline-any cline-neutral"> </span>
|
|
692
|
+
<span class="cline-any cline-neutral"> </span>
|
|
693
|
+
<span class="cline-any cline-no"> </span>
|
|
694
|
+
<span class="cline-any cline-no"> </span>
|
|
695
|
+
<span class="cline-any cline-neutral"> </span>
|
|
696
|
+
<span class="cline-any cline-neutral"> </span>
|
|
697
|
+
<span class="cline-any cline-neutral"> </span>
|
|
698
|
+
<span class="cline-any cline-no"> </span>
|
|
699
|
+
<span class="cline-any cline-neutral"> </span>
|
|
700
|
+
<span class="cline-any cline-no"> </span>
|
|
701
|
+
<span class="cline-any cline-no"> </span>
|
|
702
|
+
<span class="cline-any cline-neutral"> </span>
|
|
703
|
+
<span class="cline-any cline-neutral"> </span>
|
|
704
|
+
<span class="cline-any cline-neutral"> </span>
|
|
705
|
+
<span class="cline-any cline-neutral"> </span>
|
|
706
|
+
<span class="cline-any cline-no"> </span>
|
|
707
|
+
<span class="cline-any cline-no"> </span>
|
|
708
|
+
<span class="cline-any cline-no"> </span>
|
|
709
|
+
<span class="cline-any cline-neutral"> </span>
|
|
710
|
+
<span class="cline-any cline-neutral"> </span>
|
|
711
|
+
<span class="cline-any cline-neutral"> </span>
|
|
712
|
+
<span class="cline-any cline-no"> </span>
|
|
713
|
+
<span class="cline-any cline-neutral"> </span>
|
|
714
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { TSESTree } from '@typescript-eslint/typescript-estree';
|
|
715
|
+
import { traverseAST } from './ast-parser';
|
|
716
|
+
import { Severity } from '@aiready/core';
|
|
717
|
+
|
|
718
|
+
export type FileType = 'test' | 'production' | 'config' | 'types';
|
|
719
|
+
export type CodeLayer = 'api' | 'business' | 'data' | 'utility' | 'unknown';
|
|
720
|
+
|
|
721
|
+
export interface CodeContext {
|
|
722
|
+
fileType: FileType;
|
|
723
|
+
codeLayer: CodeLayer;
|
|
724
|
+
complexity: number;
|
|
725
|
+
isTestFile: boolean;
|
|
726
|
+
isTypeDefinition: boolean;
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
/**
|
|
730
|
+
* Detect the file type based on file path and content
|
|
731
|
+
*/
|
|
732
|
+
export function detectFileType(
|
|
733
|
+
filePath: string,
|
|
734
|
+
ast: TSESTree.Program
|
|
735
|
+
):<span class="missing-if-branch" title="if path not taken" >I</span> FileType {
|
|
736
|
+
void ast;
|
|
737
|
+
const path = filePath.toLowerCase();
|
|
738
|
+
|
|
739
|
+
// Test files
|
|
740
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (
|
|
741
|
+
path.match(/\.(test|spec)\.(ts|tsx|js|jsx)$/) ||
|
|
742
|
+
path.includes('__tests__')
|
|
743
|
+
) {
|
|
744
|
+
<span class="cstat-no" title="statement not covered" > return 'test';</span>
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
// Type definition files
|
|
748
|
+
if (path.endsWith('.d.ts') || path.includes('types')) {
|
|
749
|
+
return 'types';
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
// Config files
|
|
753
|
+
if (
|
|
754
|
+
path.match(/config|\.config\.|rc\.|setup/) ||
|
|
755
|
+
path.includes('configuration')
|
|
756
|
+
) {
|
|
757
|
+
return 'config';
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
return 'production';
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
/**
|
|
764
|
+
* Detect the code layer based on imports and exports
|
|
765
|
+
*/
|
|
766
|
+
export function detectCodeLayer(ast: TSESTree.Program): CodeLayer {
|
|
767
|
+
let ha<span class="missing-if-branch" title="if path not taken" >I</span>sAPIIndicators = 0;
|
|
768
|
+
let hasB<span class="cstat-no" title="statement not covered" >usinessIndicators = 0;</span>
|
|
769
|
+
let hasDataIndicators = 0;
|
|
770
|
+
let ha<span class="missing-if-branch" title="if path not taken" >I</span>sUtilityIndicators = 0;
|
|
771
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
772
|
+
traverseAST(ast, {
|
|
773
|
+
enter: (node) => {
|
|
774
|
+
// Check imports
|
|
775
|
+
if (node.type === 'ImportDeclaration') {
|
|
776
|
+
const source = node.source.value as string;
|
|
777
|
+
|
|
778
|
+
if (source.match(/express|fastify|koa|@nestjs|axios|fetch|http/i)) {
|
|
779
|
+
hasAPIIndicators++;
|
|
780
|
+
}
|
|
781
|
+
if (
|
|
782
|
+
source.match(/database|prisma|typeorm|sequelize|mongoose|pg|mysql/i)
|
|
783
|
+
) {
|
|
784
|
+
hasDataIndicators++;
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
// Check function names for layer indicators
|
|
789
|
+
if (node.type === 'FunctionDeclaration' && node.id) {
|
|
790
|
+
const name = node.id.name;
|
|
791
|
+
|
|
792
|
+
// API layer patterns
|
|
793
|
+
if (
|
|
794
|
+
name.match(
|
|
795
|
+
/^(get|post|put|delete|patch|handle|api|route|controller)/i
|
|
796
|
+
)
|
|
797
|
+
) {
|
|
798
|
+
hasAPIIndicators++;
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
// Business logic patterns
|
|
802
|
+
if (
|
|
803
|
+
name.match(/^(calculate|process|validate|transform|compute|analyze)/i)
|
|
804
|
+
) {
|
|
805
|
+
hasBusinessIndicators++;
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
// Data layer patterns
|
|
809
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (
|
|
810
|
+
name.match(/^(find|create|update|delete|save|fetch|query|insert)/i)
|
|
811
|
+
) {
|
|
812
|
+
hasDataIndicators++;
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
// Utility patterns
|
|
816
|
+
if (
|
|
817
|
+
name.match(
|
|
818
|
+
/^(format|parse|convert|normalize|sanitize|encode|decode)/i
|
|
819
|
+
)
|
|
820
|
+
) {
|
|
821
|
+
hasUtilityIndicators++;
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
// Check for exports
|
|
826
|
+
if (
|
|
827
|
+
node.type === 'ExportNamedDeclaration' ||
|
|
828
|
+
node.type === 'ExportDefaultDeclaration'
|
|
829
|
+
) {
|
|
830
|
+
// Functions exported with "api", "handler", "route" suggest API layer
|
|
831
|
+
if (node.type === 'ExportNamedDeclaration' && node.declaration) {
|
|
832
|
+
if (
|
|
833
|
+
node.declaration.type === 'FunctionDeclaration' &&
|
|
834
|
+
node.declaration.id
|
|
835
|
+
) {
|
|
836
|
+
const name = node.declaration.id.name;
|
|
837
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (name.match(/handler|route|api|controller/i)) {
|
|
838
|
+
<span class="cstat-no" title="statement not covered" > hasAPIIndicators += 2; // Stronger signal</span>
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
},
|
|
844
|
+
});
|
|
845
|
+
|
|
846
|
+
// Determine layer based on indicators
|
|
847
|
+
const scores = {
|
|
848
|
+
api: hasAPIIndicators,
|
|
849
|
+
business: hasBusinessIndicators,
|
|
850
|
+
data: hasDataIndicators,
|
|
851
|
+
utility: hasUtilityIndicators,
|
|
852
|
+
};
|
|
853
|
+
|
|
854
|
+
const maxScore = Math.max(...Object.values(scores));
|
|
855
|
+
if (maxScore === 0) {
|
|
856
|
+
return 'unknown';
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
// Return the layer with highest score
|
|
860
|
+
if (scores.api === maxScore) return 'api';
|
|
861
|
+
if (scores.data === maxScore) return 'data';
|
|
862
|
+
if (scores.business === maxScore) return 'business';
|
|
863
|
+
if (scores.utility === maxScore) return 'utility';
|
|
864
|
+
|
|
865
|
+
return 'unknown';
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
/**
|
|
869
|
+
* Calculate cyclomatic complexity for a function
|
|
870
|
+
*/
|
|
871
|
+
export function calculateComplexity(node: TSESTree.Node): number {
|
|
872
|
+
let complexity = 1; // Base complexity
|
|
873
|
+
|
|
874
|
+
traverseAST(node, {
|
|
875
|
+
enter: (childNode) => {
|
|
876
|
+
// Each decision point adds 1 to complexity
|
|
877
|
+
switch (childNode.type) {
|
|
878
|
+
case 'IfStatement':
|
|
879
|
+
case 'ConditionalExpression': // ternary
|
|
880
|
+
case 'SwitchCase':
|
|
881
|
+
case 'ForStatement':
|
|
882
|
+
case 'ForInStatement':
|
|
883
|
+
case 'ForOfStatement':
|
|
884
|
+
case 'WhileStatement':
|
|
885
|
+
case 'DoWhileStatement':
|
|
886
|
+
case 'CatchClause':
|
|
887
|
+
complexity++;
|
|
888
|
+
break;
|
|
889
|
+
case 'LogicalExpression':
|
|
890
|
+
// && and || add complexity
|
|
891
|
+
if (childNode.operator === '&&' || childNode.operator === '||') {
|
|
892
|
+
complexity++;
|
|
893
|
+
}
|
|
894
|
+
break;
|
|
895
|
+
}
|
|
896
|
+
},
|
|
897
|
+
});
|
|
898
|
+
|
|
899
|
+
return complexity;
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
/**
|
|
903
|
+
* Build a complete context for a file
|
|
904
|
+
*/
|
|
905
|
+
export function buildCodeContext(
|
|
906
|
+
filePath: string,
|
|
907
|
+
ast: TSESTree.Program
|
|
908
|
+
): CodeContext {
|
|
909
|
+
const fileType = detectFileType(filePath, ast);
|
|
910
|
+
const codeLayer = detectCodeLayer(ast);
|
|
911
|
+
|
|
912
|
+
// Calculate average complexity of functions in file
|
|
913
|
+
let totalComplexity = 0;
|
|
914
|
+
let functionCount = 0;
|
|
915
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>
|
|
916
|
+
traverseAST(ast, {
|
|
917
|
+
enter: (node) => {
|
|
918
|
+
if (
|
|
919
|
+
node.type === 'FunctionDeclaration' ||
|
|
920
|
+
node.type === 'FunctionExpression' ||
|
|
921
|
+
node.type === 'ArrowFunctionExpression'
|
|
922
|
+
) {
|
|
923
|
+
totalComplexity += calculateComplexity(node);
|
|
924
|
+
functionCount++;
|
|
925
|
+
}
|
|
926
|
+
<span class="missing-if-branch" title="if path not taken" >I</span> },
|
|
927
|
+
});
|
|
928
|
+
<span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ></span></span>
|
|
929
|
+
const avgComplexity = functionCount > 0 ? totalComplexity / functionCount : 1;
|
|
930
|
+
|
|
931
|
+
return {
|
|
932
|
+
fileType,
|
|
933
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>codeLayer,
|
|
934
|
+
complexity: Math.round(avgComplexity),
|
|
935
|
+
isTestFile: fileType === 'test',
|
|
936
|
+
isTypeDefinition: fileType === 'types',
|
|
937
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>};
|
|
938
|
+
}<span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ></span></span>
|
|
939
|
+
|
|
940
|
+
/**
|
|
941
|
+
* Get context-adjusted severity based on code context
|
|
942
|
+
*/
|
|
943
|
+
export function <span class="fstat-no" title="function not covered" >adjustSeverity(</span>
|
|
944
|
+
baseSeverity: Severity | string,
|
|
945
|
+
context: CodeContext,
|
|
946
|
+
issueType: string
|
|
947
|
+
): Severity {
|
|
948
|
+
const getEnum = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(s</span>: any): Severity => {</span>
|
|
949
|
+
<span class="cstat-no" title="statement not covered" > if (s === Severity.Critical || s === 'critical') <span class="cstat-no" title="statement not covered" >return Severity.Critical;</span></span>
|
|
950
|
+
<span class="cstat-no" title="statement not covered" > if (s === Severity.Major || s === 'major') <span class="cstat-no" title="statement not covered" >return Severity.Major;</span></span>
|
|
951
|
+
<span class="cstat-no" title="statement not covered" > if (s === Severity.Minor || s === 'minor') <span class="cstat-no" title="statement not covered" >return Severity.Minor;</span></span>
|
|
952
|
+
<span class="cstat-no" title="statement not covered" > return Severity.Info;</span>
|
|
953
|
+
};
|
|
954
|
+
|
|
955
|
+
let currentSev = <span class="cstat-no" title="statement not covered" >getEnum(baseSeverity);</span>
|
|
956
|
+
|
|
957
|
+
// Test files: Be more lenient
|
|
958
|
+
<span class="cstat-no" title="statement not covered" > if (context.isTestFile) {</span>
|
|
959
|
+
if (currentSev === Severity.Minor) currentSev = Severity.Info;
|
|
960
|
+
if (currentSev === Severity.Major) currentSev = Severity.Minor;
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>// Type definition files: Be more lenient (often use short generic names)
|
|
964
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (context.isTypeDefinition) {
|
|
965
|
+
<span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" > if (currentSev === Severity.Minor) <span class="cstat-no" title="statement not covered" >currentSev = Severity.Info;</span></span></span>
|
|
966
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
967
|
+
|
|
968
|
+
// API layer: Be stricter (public interface)
|
|
969
|
+
<span class="cstat-no" title="statement not covered" > if (context.codeLayer === 'api') {</span>
|
|
970
|
+
<span class="cstat-no" title="statement not covered" > if (currentSev === Severity.Info && issueType === 'unclear')</span>
|
|
971
|
+
<span class="missing-if-branch" title="if path not taken" >I</span> currentSev = Severity.Minor;<span class="branch-1 cbranch-no" title="branch not covered" ></span>
|
|
972
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (<span class="branch-0 cbranch-no" title="branch not covered" >currentSev === Severity.Minor && i</span>ssueType === 'unclear')</span>
|
|
973
|
+
currentSev = Severity.Major;
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
// High complexity: Be stricter (need clearer names)
|
|
977
|
+
if (context.complexity > 10) {
|
|
978
|
+
<span class="missing-if-branch" title="if path not taken" >I</span><span class="missing-if-branch" title="if path not taken" >I</span>if (currentSev === Severity.Info) currentSev = Severity.Minor;
|
|
979
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
980
|
+
|
|
981
|
+
// Utility/helper layer: Allow shorter names
|
|
982
|
+
<span class="cstat-no" title="statement not covered" > if (context.codeLayer === 'utility') {</span>
|
|
983
|
+
<span class="cstat-no" title="statement not covered" > if (currentSev === Severity.Minor && issueType === 'abbreviation')</span>
|
|
984
|
+
currentSev = Severity.Info;<span class="branch-1 cbranch-no" title="branch not covered" ></span>
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
return currentSev;
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
/**
|
|
991
|
+
* Check if a short variable name is acceptable in this context
|
|
992
|
+
*/
|
|
993
|
+
export function <span class="fstat-no" title="function not covered" >isAcceptableInContext(</span>
|
|
994
|
+
name: string,
|
|
995
|
+
context: CodeContext,
|
|
996
|
+
options: {
|
|
997
|
+
isLoopVariable?: boolean;
|
|
998
|
+
isParameter?: boolean;
|
|
999
|
+
isDestructured?: boolean;
|
|
1000
|
+
complexity?: number;
|
|
1001
|
+
}
|
|
1002
|
+
): boolean {
|
|
1003
|
+
// Loop variables always acceptable
|
|
1004
|
+
<span class="cstat-no" title="statement not covered" > if (options.isLoopVariable && ['i', 'j', 'k', 'l', 'n', 'm'].includes(name)) {</span>
|
|
1005
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
// Test files: More lenient
|
|
1009
|
+
<span class="cstat-no" title="statement not covered" > if (context.isTestFile) {</span>
|
|
1010
|
+
// Common test patterns: a/b for comparison, x/y for coordinates
|
|
1011
|
+
<span class="cstat-no" title="statement not covered" > if (['a', 'b', 'c', 'x', 'y', 'z'].includes(name) && options.isParameter) {</span>
|
|
1012
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1013
|
+
}
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
// Math/graphics context: x, y, z acceptable
|
|
1017
|
+
<span class="cstat-no" title="statement not covered" > if (context.codeLayer === 'utility' && ['x', 'y', 'z'].includes(name)) {</span>
|
|
1018
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
// Destructured from well-named source: More lenient
|
|
1022
|
+
<span class="cstat-no" title="statement not covered" > if (options.isDestructured) {</span>
|
|
1023
|
+
// Coverage metrics s/b/f/l always acceptable when destructured
|
|
1024
|
+
<span class="cstat-no" title="statement not covered" > if (['s', 'b', 'f', 'l'].includes(name)) {</span>
|
|
1025
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1026
|
+
}
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
// Simple functions (complexity < 3): Allow short parameter names
|
|
1030
|
+
<span class="cstat-no" title="statement not covered" > if (options.isParameter && (options.complexity ?? context.complexity) < 3) {</span>
|
|
1031
|
+
<span class="cstat-no" title="statement not covered" > if (name.length >= 2) {</span>
|
|
1032
|
+
<span class="cstat-no" title="statement not covered" > return true; // Two-letter names OK in simple functions</span>
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
1037
|
+
}
|
|
1038
|
+
</pre></td></tr></table></pre>
|
|
1039
|
+
|
|
1040
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
1041
|
+
</div><!-- /wrapper -->
|
|
1042
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
1043
|
+
Code coverage generated by
|
|
1044
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1045
|
+
at 2026-03-09T03:06:05.217Z
|
|
1046
|
+
</div>
|
|
1047
|
+
<script src="../../prettify.js"></script>
|
|
1048
|
+
<script>
|
|
1049
|
+
window.onload = function () {
|
|
1050
|
+
prettyPrint();
|
|
1051
|
+
};
|
|
1052
|
+
</script>
|
|
1053
|
+
<script src="../../sorter.js"></script>
|
|
1054
|
+
<script src="../../block-navigation.js"></script>
|
|
1055
|
+
</body>
|
|
1056
|
+
</html>
|
|
1057
|
+
|