Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(166)

Side by Side Diff: Source/devtools/scripts/jsdoc-validator/tests/this.js

Issue 202813004: DevTools: [JsDocValidator] Make sure function receivers agree with @this annotations (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Address misunderstood comments Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/devtools/scripts/jsdoc-validator/tests/golden.dat ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 this.foo = this.foo + 1; // OK - outside of function. 1 this.foo = this.foo + 1; // OK - outside of function.
2 2
3 function f() { 3 function f() {
4 this.foo = this.foo + 1; // OK - global |this|. 4 this.foo = this.foo + 1; // OK - global |this|.
5 } 5 }
6 6
7 /** 7 /**
8 * @constructor 8 * @constructor
9 */ 9 */
10 function TypeOne() { 10 function TypeOne() {
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 */ 139 */
140 function callback() { 140 function callback() {
141 this.bar = this.bar + 1; // OK - @this declared. 141 this.bar = this.bar + 1; // OK - @this declared.
142 } 142 }
143 }, 143 },
144 144
145 funcThree: function() { 145 funcThree: function() {
146 function badCallbackInMethod() { 146 function badCallbackInMethod() {
147 this.bar = this.bar + 1; // ERROR - @this not declared. 147 this.bar = this.bar + 1; // ERROR - @this not declared.
148 } 148 }
149
150 /**
151 * @this {TypeOne}
152 */
153 function callbackNotReferencingThis() {
154 return 3; // ERROR - @this for a function not referencing |this|.
155 }
149 } 156 }
150 } 157 }
151 158
152 return new TypeThree(); 159 return new TypeThree();
153 } 160 }
154 161
155 var object = { 162 var object = {
156 /** 163 /**
157 * @this {MyType} 164 * @this {MyType}
158 */ 165 */
159 value: function() 166 value: function()
160 { 167 {
161 this.foo = 1; // OK - @this annotated. 168 this.foo = 1; // OK - @this annotated.
162 } 169 }
163 }; 170 };
164 171
165 (function() { 172 (function() {
166 var object = { 173 var object = {
167 /** 174 /**
168 * @this {MyType} 175 * @this {MyType}
169 */ 176 */
170 value: function() 177 value: function()
171 { 178 {
172 this.foo = 1; // OK - @this annotated. 179 this.foo = 1; // OK - @this annotated.
173 } 180 }
174 }; 181 };
175 })(); 182 })();
183
184 /**
185 * @constructor
186 */
187 var ReceiverTest = function() {}
188
189 ReceiverTest.prototype = {
190 memberOne: function() {
191 var badMemberBinding1 = this.memberTwo.bind(null); // ERROR - Member not bound to |this| receiver.
192 var badMemberBinding2 = this.memberTwo.bind(bar); // ERROR - Member not bound to |this| receiver.
193 var goodMemberBinding = this.memberTwo.bind(this);
194
195 /** @this {ReceiverTest} */
196 function callbackWithThis()
197 {
198 this.memberTwo();
199 }
200
201 function callbackNoThis()
202 {
203 return 42;
204 }
205
206 callbackWithThis.call(this);
207 callbackWithThis.call(foo);
208 callbackNoThis();
209 callbackNoThis.call(null, 1);
210 callbackNoThis.apply(null, [2]);
211 callbackNoThis.bind(null, 1);
212 this.memberTwo(callbackWithThis.bind(this, 1));
213 this.memberTwo(callbackWithThis.bind(foo, 1));
214 this.memberTwo(callbackNoThis);
215 this.memberTwo(callbackNoThis.bind(null));
216
217 callbackWithThis(); // ERROR - No receiver.
218 callbackWithThis.call(); // ERROR - No receiver.
219 callbackWithThis.call(null); // ERROR - No receiver.
220 callbackWithThis.apply(); // ERROR - No receiver.
221 callbackWithThis.apply(null); // ERROR - No receiver.
222 callbackNoThis.call(this); // ERROR - Function has no @this annotation.
223 callbackNoThis.call(foo); // ERROR - Function has no @this annotation.
224 callbackNoThis.apply(this); // ERROR - Function has no @this annotation.
225 callbackNoThis.bind(this); // ERROR - Function has no @this annotation.
226
227 this.memberTwo(callbackWithThis); // ERROR - Used as argument with no bo und receiver.
228 this.memberTwo(callbackWithThis.bind(null, 2)); // ERROR - Used as argum ent with no bound receiver (null means "no receiver").
229 this.memberTwo(callbackNoThis.bind(this)); // ERROR - Bound to a receive r but has no @this annotation.
230 this.memberTwo(callbackNoThis.bind(foo)); // ERROR - Bound to a receiver but has no @this annotation.
231 },
232
233 memberTwo: function(arg) {}
234 }
OLDNEW
« no previous file with comments | « Source/devtools/scripts/jsdoc-validator/tests/golden.dat ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698