syntaxWalker.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445
  1. "use strict";
  2. var ts = require("typescript");
  3. var SyntaxWalker = (function () {
  4. function SyntaxWalker() {
  5. }
  6. SyntaxWalker.prototype.walk = function (node) {
  7. this.visitNode(node);
  8. };
  9. SyntaxWalker.prototype.visitAnyKeyword = function (node) {
  10. this.walkChildren(node);
  11. };
  12. SyntaxWalker.prototype.visitArrayLiteralExpression = function (node) {
  13. this.walkChildren(node);
  14. };
  15. SyntaxWalker.prototype.visitArrowFunction = function (node) {
  16. this.walkChildren(node);
  17. };
  18. SyntaxWalker.prototype.visitBinaryExpression = function (node) {
  19. this.walkChildren(node);
  20. };
  21. SyntaxWalker.prototype.visitBindingElement = function (node) {
  22. this.walkChildren(node);
  23. };
  24. SyntaxWalker.prototype.visitBindingPattern = function (node) {
  25. this.walkChildren(node);
  26. };
  27. SyntaxWalker.prototype.visitBlock = function (node) {
  28. this.walkChildren(node);
  29. };
  30. SyntaxWalker.prototype.visitBreakStatement = function (node) {
  31. this.walkChildren(node);
  32. };
  33. SyntaxWalker.prototype.visitCallExpression = function (node) {
  34. this.walkChildren(node);
  35. };
  36. SyntaxWalker.prototype.visitCallSignature = function (node) {
  37. this.walkChildren(node);
  38. };
  39. SyntaxWalker.prototype.visitCaseClause = function (node) {
  40. this.walkChildren(node);
  41. };
  42. SyntaxWalker.prototype.visitClassDeclaration = function (node) {
  43. this.walkChildren(node);
  44. };
  45. SyntaxWalker.prototype.visitCatchClause = function (node) {
  46. this.walkChildren(node);
  47. };
  48. SyntaxWalker.prototype.visitConditionalExpression = function (node) {
  49. this.walkChildren(node);
  50. };
  51. SyntaxWalker.prototype.visitConstructorDeclaration = function (node) {
  52. this.walkChildren(node);
  53. };
  54. SyntaxWalker.prototype.visitConstructorType = function (node) {
  55. this.walkChildren(node);
  56. };
  57. SyntaxWalker.prototype.visitContinueStatement = function (node) {
  58. this.walkChildren(node);
  59. };
  60. SyntaxWalker.prototype.visitDebuggerStatement = function (node) {
  61. this.walkChildren(node);
  62. };
  63. SyntaxWalker.prototype.visitDefaultClause = function (node) {
  64. this.walkChildren(node);
  65. };
  66. SyntaxWalker.prototype.visitDoStatement = function (node) {
  67. this.walkChildren(node);
  68. };
  69. SyntaxWalker.prototype.visitElementAccessExpression = function (node) {
  70. this.walkChildren(node);
  71. };
  72. SyntaxWalker.prototype.visitEnumDeclaration = function (node) {
  73. this.walkChildren(node);
  74. };
  75. SyntaxWalker.prototype.visitExportAssignment = function (node) {
  76. this.walkChildren(node);
  77. };
  78. SyntaxWalker.prototype.visitExpressionStatement = function (node) {
  79. this.walkChildren(node);
  80. };
  81. SyntaxWalker.prototype.visitForStatement = function (node) {
  82. this.walkChildren(node);
  83. };
  84. SyntaxWalker.prototype.visitForInStatement = function (node) {
  85. this.walkChildren(node);
  86. };
  87. SyntaxWalker.prototype.visitForOfStatement = function (node) {
  88. this.walkChildren(node);
  89. };
  90. SyntaxWalker.prototype.visitFunctionDeclaration = function (node) {
  91. this.walkChildren(node);
  92. };
  93. SyntaxWalker.prototype.visitFunctionExpression = function (node) {
  94. this.walkChildren(node);
  95. };
  96. SyntaxWalker.prototype.visitFunctionType = function (node) {
  97. this.walkChildren(node);
  98. };
  99. SyntaxWalker.prototype.visitGetAccessor = function (node) {
  100. this.walkChildren(node);
  101. };
  102. SyntaxWalker.prototype.visitIdentifier = function (node) {
  103. this.walkChildren(node);
  104. };
  105. SyntaxWalker.prototype.visitIfStatement = function (node) {
  106. this.walkChildren(node);
  107. };
  108. SyntaxWalker.prototype.visitImportDeclaration = function (node) {
  109. this.walkChildren(node);
  110. };
  111. SyntaxWalker.prototype.visitImportEqualsDeclaration = function (node) {
  112. this.walkChildren(node);
  113. };
  114. SyntaxWalker.prototype.visitIndexSignatureDeclaration = function (node) {
  115. this.walkChildren(node);
  116. };
  117. SyntaxWalker.prototype.visitInterfaceDeclaration = function (node) {
  118. this.walkChildren(node);
  119. };
  120. SyntaxWalker.prototype.visitJsxElement = function (node) {
  121. this.walkChildren(node);
  122. };
  123. SyntaxWalker.prototype.visitJsxSelfClosingElement = function (node) {
  124. this.walkChildren(node);
  125. };
  126. SyntaxWalker.prototype.visitLabeledStatement = function (node) {
  127. this.walkChildren(node);
  128. };
  129. SyntaxWalker.prototype.visitMethodDeclaration = function (node) {
  130. this.walkChildren(node);
  131. };
  132. SyntaxWalker.prototype.visitMethodSignature = function (node) {
  133. this.walkChildren(node);
  134. };
  135. SyntaxWalker.prototype.visitModuleDeclaration = function (node) {
  136. this.walkChildren(node);
  137. };
  138. SyntaxWalker.prototype.visitNamedImports = function (node) {
  139. this.walkChildren(node);
  140. };
  141. SyntaxWalker.prototype.visitNamespaceImport = function (node) {
  142. this.walkChildren(node);
  143. };
  144. SyntaxWalker.prototype.visitNewExpression = function (node) {
  145. this.walkChildren(node);
  146. };
  147. SyntaxWalker.prototype.visitObjectLiteralExpression = function (node) {
  148. this.walkChildren(node);
  149. };
  150. SyntaxWalker.prototype.visitParameterDeclaration = function (node) {
  151. this.walkChildren(node);
  152. };
  153. SyntaxWalker.prototype.visitPostfixUnaryExpression = function (node) {
  154. this.walkChildren(node);
  155. };
  156. SyntaxWalker.prototype.visitPrefixUnaryExpression = function (node) {
  157. this.walkChildren(node);
  158. };
  159. SyntaxWalker.prototype.visitPropertyAccessExpression = function (node) {
  160. this.walkChildren(node);
  161. };
  162. SyntaxWalker.prototype.visitPropertyAssignment = function (node) {
  163. this.walkChildren(node);
  164. };
  165. SyntaxWalker.prototype.visitPropertyDeclaration = function (node) {
  166. this.walkChildren(node);
  167. };
  168. SyntaxWalker.prototype.visitPropertySignature = function (node) {
  169. this.walkChildren(node);
  170. };
  171. SyntaxWalker.prototype.visitRegularExpressionLiteral = function (node) {
  172. this.walkChildren(node);
  173. };
  174. SyntaxWalker.prototype.visitReturnStatement = function (node) {
  175. this.walkChildren(node);
  176. };
  177. SyntaxWalker.prototype.visitSetAccessor = function (node) {
  178. this.walkChildren(node);
  179. };
  180. SyntaxWalker.prototype.visitSourceFile = function (node) {
  181. this.walkChildren(node);
  182. };
  183. SyntaxWalker.prototype.visitStringLiteral = function (node) {
  184. this.walkChildren(node);
  185. };
  186. SyntaxWalker.prototype.visitSwitchStatement = function (node) {
  187. this.walkChildren(node);
  188. };
  189. SyntaxWalker.prototype.visitTemplateExpression = function (node) {
  190. this.walkChildren(node);
  191. };
  192. SyntaxWalker.prototype.visitThrowStatement = function (node) {
  193. this.walkChildren(node);
  194. };
  195. SyntaxWalker.prototype.visitTryStatement = function (node) {
  196. this.walkChildren(node);
  197. };
  198. SyntaxWalker.prototype.visitTypeAssertionExpression = function (node) {
  199. this.walkChildren(node);
  200. };
  201. SyntaxWalker.prototype.visitTypeLiteral = function (node) {
  202. this.walkChildren(node);
  203. };
  204. SyntaxWalker.prototype.visitTypeReference = function (node) {
  205. this.walkChildren(node);
  206. };
  207. SyntaxWalker.prototype.visitVariableDeclaration = function (node) {
  208. this.walkChildren(node);
  209. };
  210. SyntaxWalker.prototype.visitVariableStatement = function (node) {
  211. this.walkChildren(node);
  212. };
  213. SyntaxWalker.prototype.visitWhileStatement = function (node) {
  214. this.walkChildren(node);
  215. };
  216. SyntaxWalker.prototype.visitWithStatement = function (node) {
  217. this.walkChildren(node);
  218. };
  219. SyntaxWalker.prototype.visitNode = function (node) {
  220. switch (node.kind) {
  221. case ts.SyntaxKind.AnyKeyword:
  222. this.visitAnyKeyword(node);
  223. break;
  224. case ts.SyntaxKind.ArrayBindingPattern:
  225. this.visitBindingPattern(node);
  226. break;
  227. case ts.SyntaxKind.ArrayLiteralExpression:
  228. this.visitArrayLiteralExpression(node);
  229. break;
  230. case ts.SyntaxKind.ArrowFunction:
  231. this.visitArrowFunction(node);
  232. break;
  233. case ts.SyntaxKind.BinaryExpression:
  234. this.visitBinaryExpression(node);
  235. break;
  236. case ts.SyntaxKind.BindingElement:
  237. this.visitBindingElement(node);
  238. break;
  239. case ts.SyntaxKind.Block:
  240. this.visitBlock(node);
  241. break;
  242. case ts.SyntaxKind.BreakStatement:
  243. this.visitBreakStatement(node);
  244. break;
  245. case ts.SyntaxKind.CallExpression:
  246. this.visitCallExpression(node);
  247. break;
  248. case ts.SyntaxKind.CallSignature:
  249. this.visitCallSignature(node);
  250. break;
  251. case ts.SyntaxKind.CaseClause:
  252. this.visitCaseClause(node);
  253. break;
  254. case ts.SyntaxKind.ClassDeclaration:
  255. this.visitClassDeclaration(node);
  256. break;
  257. case ts.SyntaxKind.CatchClause:
  258. this.visitCatchClause(node);
  259. break;
  260. case ts.SyntaxKind.ConditionalExpression:
  261. this.visitConditionalExpression(node);
  262. break;
  263. case ts.SyntaxKind.Constructor:
  264. this.visitConstructorDeclaration(node);
  265. break;
  266. case ts.SyntaxKind.ConstructorType:
  267. this.visitConstructorType(node);
  268. break;
  269. case ts.SyntaxKind.ContinueStatement:
  270. this.visitContinueStatement(node);
  271. break;
  272. case ts.SyntaxKind.DebuggerStatement:
  273. this.visitDebuggerStatement(node);
  274. break;
  275. case ts.SyntaxKind.DefaultClause:
  276. this.visitDefaultClause(node);
  277. break;
  278. case ts.SyntaxKind.DoStatement:
  279. this.visitDoStatement(node);
  280. break;
  281. case ts.SyntaxKind.ElementAccessExpression:
  282. this.visitElementAccessExpression(node);
  283. break;
  284. case ts.SyntaxKind.EnumDeclaration:
  285. this.visitEnumDeclaration(node);
  286. break;
  287. case ts.SyntaxKind.ExportAssignment:
  288. this.visitExportAssignment(node);
  289. break;
  290. case ts.SyntaxKind.ExpressionStatement:
  291. this.visitExpressionStatement(node);
  292. break;
  293. case ts.SyntaxKind.ForStatement:
  294. this.visitForStatement(node);
  295. break;
  296. case ts.SyntaxKind.ForInStatement:
  297. this.visitForInStatement(node);
  298. break;
  299. case ts.SyntaxKind.ForOfStatement:
  300. this.visitForOfStatement(node);
  301. break;
  302. case ts.SyntaxKind.FunctionDeclaration:
  303. this.visitFunctionDeclaration(node);
  304. break;
  305. case ts.SyntaxKind.FunctionExpression:
  306. this.visitFunctionExpression(node);
  307. break;
  308. case ts.SyntaxKind.FunctionType:
  309. this.visitFunctionType(node);
  310. break;
  311. case ts.SyntaxKind.GetAccessor:
  312. this.visitGetAccessor(node);
  313. break;
  314. case ts.SyntaxKind.Identifier:
  315. this.visitIdentifier(node);
  316. break;
  317. case ts.SyntaxKind.IfStatement:
  318. this.visitIfStatement(node);
  319. break;
  320. case ts.SyntaxKind.ImportDeclaration:
  321. this.visitImportDeclaration(node);
  322. break;
  323. case ts.SyntaxKind.ImportEqualsDeclaration:
  324. this.visitImportEqualsDeclaration(node);
  325. break;
  326. case ts.SyntaxKind.IndexSignature:
  327. this.visitIndexSignatureDeclaration(node);
  328. break;
  329. case ts.SyntaxKind.InterfaceDeclaration:
  330. this.visitInterfaceDeclaration(node);
  331. break;
  332. case ts.SyntaxKind.JsxElement:
  333. this.visitJsxElement(node);
  334. break;
  335. case ts.SyntaxKind.JsxSelfClosingElement:
  336. this.visitJsxSelfClosingElement(node);
  337. break;
  338. case ts.SyntaxKind.LabeledStatement:
  339. this.visitLabeledStatement(node);
  340. break;
  341. case ts.SyntaxKind.MethodDeclaration:
  342. this.visitMethodDeclaration(node);
  343. break;
  344. case ts.SyntaxKind.MethodSignature:
  345. this.visitMethodSignature(node);
  346. break;
  347. case ts.SyntaxKind.ModuleDeclaration:
  348. this.visitModuleDeclaration(node);
  349. break;
  350. case ts.SyntaxKind.NamedImports:
  351. this.visitNamedImports(node);
  352. break;
  353. case ts.SyntaxKind.NamespaceImport:
  354. this.visitNamespaceImport(node);
  355. break;
  356. case ts.SyntaxKind.NewExpression:
  357. this.visitNewExpression(node);
  358. break;
  359. case ts.SyntaxKind.ObjectBindingPattern:
  360. this.visitBindingPattern(node);
  361. break;
  362. case ts.SyntaxKind.ObjectLiteralExpression:
  363. this.visitObjectLiteralExpression(node);
  364. break;
  365. case ts.SyntaxKind.Parameter:
  366. this.visitParameterDeclaration(node);
  367. break;
  368. case ts.SyntaxKind.PostfixUnaryExpression:
  369. this.visitPostfixUnaryExpression(node);
  370. break;
  371. case ts.SyntaxKind.PrefixUnaryExpression:
  372. this.visitPrefixUnaryExpression(node);
  373. break;
  374. case ts.SyntaxKind.PropertyAccessExpression:
  375. this.visitPropertyAccessExpression(node);
  376. break;
  377. case ts.SyntaxKind.PropertyAssignment:
  378. this.visitPropertyAssignment(node);
  379. break;
  380. case ts.SyntaxKind.PropertyDeclaration:
  381. this.visitPropertyDeclaration(node);
  382. break;
  383. case ts.SyntaxKind.PropertySignature:
  384. this.visitPropertySignature(node);
  385. break;
  386. case ts.SyntaxKind.RegularExpressionLiteral:
  387. this.visitRegularExpressionLiteral(node);
  388. break;
  389. case ts.SyntaxKind.ReturnStatement:
  390. this.visitReturnStatement(node);
  391. break;
  392. case ts.SyntaxKind.SetAccessor:
  393. this.visitSetAccessor(node);
  394. break;
  395. case ts.SyntaxKind.SourceFile:
  396. this.visitSourceFile(node);
  397. break;
  398. case ts.SyntaxKind.StringLiteral:
  399. this.visitStringLiteral(node);
  400. break;
  401. case ts.SyntaxKind.SwitchStatement:
  402. this.visitSwitchStatement(node);
  403. break;
  404. case ts.SyntaxKind.TemplateExpression:
  405. this.visitTemplateExpression(node);
  406. break;
  407. case ts.SyntaxKind.ThrowStatement:
  408. this.visitThrowStatement(node);
  409. break;
  410. case ts.SyntaxKind.TryStatement:
  411. this.visitTryStatement(node);
  412. break;
  413. case ts.SyntaxKind.TypeAssertionExpression:
  414. this.visitTypeAssertionExpression(node);
  415. break;
  416. case ts.SyntaxKind.TypeLiteral:
  417. this.visitTypeLiteral(node);
  418. break;
  419. case ts.SyntaxKind.TypeReference:
  420. this.visitTypeReference(node);
  421. break;
  422. case ts.SyntaxKind.VariableDeclaration:
  423. this.visitVariableDeclaration(node);
  424. break;
  425. case ts.SyntaxKind.VariableStatement:
  426. this.visitVariableStatement(node);
  427. break;
  428. case ts.SyntaxKind.WhileStatement:
  429. this.visitWhileStatement(node);
  430. break;
  431. case ts.SyntaxKind.WithStatement:
  432. this.visitWithStatement(node);
  433. break;
  434. default:
  435. this.walkChildren(node);
  436. break;
  437. }
  438. };
  439. SyntaxWalker.prototype.walkChildren = function (node) {
  440. var _this = this;
  441. ts.forEachChild(node, function (child) { return _this.visitNode(child); });
  442. };
  443. return SyntaxWalker;
  444. }());
  445. exports.SyntaxWalker = SyntaxWalker;