holmes 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +4 -0
  3. data/README.md +10 -0
  4. data/Rakefile +1 -0
  5. data/holmes.gemspec +24 -0
  6. data/lib/holmes.rb +38 -0
  7. data/lib/holmes/node_modules/detective/README.markdown +64 -0
  8. data/lib/holmes/node_modules/detective/example/strings.js +6 -0
  9. data/lib/holmes/node_modules/detective/example/strings_src.js +3 -0
  10. data/lib/holmes/node_modules/detective/index.js +65 -0
  11. data/lib/holmes/node_modules/detective/node_modules/burrito/.npmignore +1 -0
  12. data/lib/holmes/node_modules/detective/node_modules/burrito/README.markdown +185 -0
  13. data/lib/holmes/node_modules/detective/node_modules/burrito/browserify.js +4296 -0
  14. data/lib/holmes/node_modules/detective/node_modules/burrito/example/microwave.js +7 -0
  15. data/lib/holmes/node_modules/detective/node_modules/burrito/example/web/bs.js +4832 -0
  16. data/lib/holmes/node_modules/detective/node_modules/burrito/example/web/index.html +14 -0
  17. data/lib/holmes/node_modules/detective/node_modules/burrito/example/web/main.js +17 -0
  18. data/lib/holmes/node_modules/detective/node_modules/burrito/example/web/server.js +12 -0
  19. data/lib/holmes/node_modules/detective/node_modules/burrito/example/wrap.js +7 -0
  20. data/lib/holmes/node_modules/detective/node_modules/burrito/index.html +8 -0
  21. data/lib/holmes/node_modules/detective/node_modules/burrito/index.js +208 -0
  22. data/lib/holmes/node_modules/detective/node_modules/burrito/main.js +11 -0
  23. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/.bin/uglifyjs +317 -0
  24. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/.npmignore +1 -0
  25. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/LICENSE +24 -0
  26. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/README.markdown +237 -0
  27. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/examples/json.js +16 -0
  28. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/examples/leaves.js +15 -0
  29. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/examples/negative.js +8 -0
  30. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/examples/scrub.js +10 -0
  31. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/examples/stringify.js +38 -0
  32. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/index.js +267 -0
  33. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/main.js +10 -0
  34. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/package.json +18 -0
  35. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/test/circular.js +115 -0
  36. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/test/date.js +35 -0
  37. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/test/equal.js +220 -0
  38. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/test/instance.js +17 -0
  39. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/test/interface.js +42 -0
  40. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/test/json.js +47 -0
  41. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/test/keys.js +29 -0
  42. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/test/leaves.js +21 -0
  43. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/test/lib/deep_equal.js +92 -0
  44. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/test/mutability.js +252 -0
  45. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/test/negative.js +20 -0
  46. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/test/obj.js +15 -0
  47. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/test/siblings.js +35 -0
  48. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/test/stop.js +41 -0
  49. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/test/stringify.js +36 -0
  50. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/test/subexpr.js +34 -0
  51. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/traverse/test/super_deep.js +55 -0
  52. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/.npmignore +4 -0
  53. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/README.html +888 -0
  54. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/README.org +463 -0
  55. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/bin/uglifyjs +317 -0
  56. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/docstyle.css +75 -0
  57. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/lib/object-ast.js +75 -0
  58. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/lib/parse-js.js +1341 -0
  59. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/lib/process.js +1949 -0
  60. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/lib/squeeze-more.js +51 -0
  61. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/package.json +22 -0
  62. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/beautify.js +28 -0
  63. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/testparser.js +402 -0
  64. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/array1.js +1 -0
  65. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/array2.js +1 -0
  66. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/array3.js +1 -0
  67. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/array4.js +1 -0
  68. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/assignment.js +1 -0
  69. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/concatstring.js +1 -0
  70. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/const.js +1 -0
  71. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/empty-blocks.js +1 -0
  72. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/forstatement.js +1 -0
  73. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/if.js +1 -0
  74. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/ifreturn.js +1 -0
  75. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/ifreturn2.js +1 -0
  76. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue10.js +1 -0
  77. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue11.js +1 -0
  78. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue13.js +1 -0
  79. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue14.js +1 -0
  80. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue16.js +1 -0
  81. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue17.js +1 -0
  82. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue20.js +1 -0
  83. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue21.js +1 -0
  84. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue25.js +1 -0
  85. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue27.js +1 -0
  86. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue28.js +1 -0
  87. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue29.js +1 -0
  88. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue30.js +1 -0
  89. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue34.js +1 -0
  90. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue4.js +1 -0
  91. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue48.js +1 -0
  92. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue50.js +1 -0
  93. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue53.js +1 -0
  94. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue54.1.js +1 -0
  95. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue68.js +1 -0
  96. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue69.js +1 -0
  97. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/issue9.js +1 -0
  98. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/mangle.js +1 -0
  99. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/strict-equals.js +1 -0
  100. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/var.js +1 -0
  101. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/expected/with.js +1 -0
  102. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/array1.js +3 -0
  103. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/array2.js +4 -0
  104. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/array3.js +4 -0
  105. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/array4.js +6 -0
  106. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/assignment.js +20 -0
  107. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/concatstring.js +3 -0
  108. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/const.js +5 -0
  109. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/empty-blocks.js +4 -0
  110. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/forstatement.js +10 -0
  111. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/if.js +6 -0
  112. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/ifreturn.js +9 -0
  113. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/ifreturn2.js +16 -0
  114. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue10.js +1 -0
  115. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue11.js +3 -0
  116. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue13.js +1 -0
  117. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue14.js +1 -0
  118. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue16.js +1 -0
  119. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue17.js +4 -0
  120. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue20.js +1 -0
  121. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue21.js +6 -0
  122. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue25.js +7 -0
  123. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue27.js +1 -0
  124. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue28.js +3 -0
  125. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue29.js +1 -0
  126. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue30.js +3 -0
  127. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue34.js +3 -0
  128. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue4.js +3 -0
  129. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue48.js +1 -0
  130. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue50.js +9 -0
  131. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue53.js +1 -0
  132. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue54.1.js +3 -0
  133. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue68.js +5 -0
  134. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue69.js +1 -0
  135. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/issue9.js +4 -0
  136. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/mangle.js +5 -0
  137. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/strict-equals.js +3 -0
  138. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/var.js +3 -0
  139. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/compress/test/with.js +2 -0
  140. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/test/unit/scripts.js +55 -0
  141. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/tmp/hoist.js +33 -0
  142. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/tmp/instrument.js +97 -0
  143. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/tmp/instrument2.js +138 -0
  144. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/tmp/test.js +16 -0
  145. data/lib/holmes/node_modules/detective/node_modules/burrito/node_modules/uglify-js/uglify-js.js +17 -0
  146. data/lib/holmes/node_modules/detective/node_modules/burrito/package.json +43 -0
  147. data/lib/holmes/node_modules/detective/node_modules/burrito/server.js +4 -0
  148. data/lib/holmes/node_modules/detective/node_modules/burrito/test/ast.js +29 -0
  149. data/lib/holmes/node_modules/detective/node_modules/burrito/test/err.js +47 -0
  150. data/lib/holmes/node_modules/detective/node_modules/burrito/test/fail.js +8 -0
  151. data/lib/holmes/node_modules/detective/node_modules/burrito/test/fail/src.js +60 -0
  152. data/lib/holmes/node_modules/detective/node_modules/burrito/test/label.js +110 -0
  153. data/lib/holmes/node_modules/detective/node_modules/burrito/test/microwave.js +33 -0
  154. data/lib/holmes/node_modules/detective/node_modules/burrito/test/parent.js +26 -0
  155. data/lib/holmes/node_modules/detective/node_modules/burrito/test/wrap.js +157 -0
  156. data/lib/holmes/node_modules/detective/package.json +39 -0
  157. data/lib/holmes/node_modules/detective/test/both.js +10 -0
  158. data/lib/holmes/node_modules/detective/test/files/both.js +4 -0
  159. data/lib/holmes/node_modules/detective/test/files/nested.js +22 -0
  160. data/lib/holmes/node_modules/detective/test/files/strings.js +13 -0
  161. data/lib/holmes/node_modules/detective/test/files/word.js +13 -0
  162. data/lib/holmes/node_modules/detective/test/nested.js +8 -0
  163. data/lib/holmes/node_modules/detective/test/strings.js +8 -0
  164. data/lib/holmes/node_modules/detective/test/word.js +11 -0
  165. data/lib/holmes/require.js +5 -0
  166. data/lib/holmes/runner.js +20 -0
  167. data/lib/holmes/version.rb +3 -0
  168. metadata +223 -0
@@ -0,0 +1,110 @@
1
+ var assert = require('assert');
2
+ var burrito = require('../');
3
+
4
+ exports.callLabel = function () {
5
+ var times = 0;
6
+ var src = burrito('foo(10)', function (node) {
7
+ if (node.name === 'call') {
8
+ assert.equal(node.label(), 'foo');
9
+ times ++;
10
+ }
11
+ });
12
+
13
+ assert.equal(times, 1);
14
+ };
15
+
16
+ exports.varLabel = function () {
17
+ var times = 0;
18
+ var src = burrito('var x = 2', function (node) {
19
+ if (node.name === 'var') {
20
+ assert.deepEqual(node.label(), [ 'x' ]);
21
+ times ++;
22
+ }
23
+ });
24
+
25
+ assert.equal(times, 1);
26
+ };
27
+
28
+ exports.varsLabel = function () {
29
+ var times = 0;
30
+ var src = burrito('var x = 2, y = 3', function (node) {
31
+ if (node.name === 'var') {
32
+ assert.deepEqual(node.label(), [ 'x', 'y' ]);
33
+ times ++;
34
+ }
35
+ });
36
+
37
+ assert.equal(times, 1);
38
+ };
39
+
40
+ exports.defunLabel = function () {
41
+ var times = 0;
42
+ var src = burrito('function moo () {}', function (node) {
43
+ if (node.name === 'defun') {
44
+ assert.deepEqual(node.label(), 'moo');
45
+ times ++;
46
+ }
47
+ });
48
+
49
+ assert.equal(times, 1);
50
+ };
51
+
52
+ exports.functionLabel = function () {
53
+ var times = 0;
54
+ var src = burrito('(function zzz () {})()', function (node) {
55
+ if (node.name === 'function') {
56
+ assert.deepEqual(node.label(), 'zzz');
57
+ times ++;
58
+ }
59
+ });
60
+
61
+ assert.equal(times, 1);
62
+ };
63
+
64
+ exports.anonFunctionLabel = function () {
65
+ var times = 0;
66
+ var src = burrito('(function () {})()', function (node) {
67
+ if (node.name === 'function') {
68
+ assert.ok(node.label() === null);
69
+ times ++;
70
+ }
71
+ });
72
+
73
+ assert.equal(times, 1);
74
+ };
75
+
76
+ exports.dotCallLabel = function () {
77
+ var times = 0;
78
+ var src = burrito('process.nextTick(fn)', function (node) {
79
+ if (node.name === 'call') {
80
+ assert.equal(node.label(), 'nextTick');
81
+ times ++;
82
+ }
83
+ });
84
+
85
+ assert.equal(times, 1);
86
+ };
87
+
88
+ exports.tripleDotLabel = function () {
89
+ var times = 0;
90
+ var src = burrito('a.b.c(fn)', function (node) {
91
+ if (node.name === 'call') {
92
+ assert.equal(node.label(), 'c');
93
+ times ++;
94
+ }
95
+ });
96
+
97
+ assert.equal(times, 1);
98
+ };
99
+
100
+ exports.exprLabel = function () {
101
+ var times = 0;
102
+ var src = burrito('a.b[x+1](fn)', function (node) {
103
+ if (node.name === 'call') {
104
+ assert.ok(node.label() === null);
105
+ times ++;
106
+ }
107
+ });
108
+
109
+ assert.equal(times, 1);
110
+ };
@@ -0,0 +1,33 @@
1
+ var assert = require('assert');
2
+ var burrito = require('../');
3
+
4
+ exports.microwave = function () {
5
+ var times = 0;
6
+ var context = {
7
+ f : function (x) { return x + 1 },
8
+ g : function (x) { return x + 2 },
9
+ h : function (x) { return x + 3 },
10
+ z : function (x) {
11
+ times ++;
12
+ return x * 10;
13
+ },
14
+ };
15
+
16
+ var res = burrito.microwave('f(g(h(5)))', context, function (node) {
17
+ if (node.name === 'call') {
18
+ node.wrap(function (s) {
19
+ return 'z(' + s + ')';
20
+ });
21
+ }
22
+ });
23
+
24
+ assert.equal(res, (((((5 + 3) * 10) + 2) * 10) + 1) * 10);
25
+ assert.equal(times, 3);
26
+ };
27
+
28
+ exports.emptyContext = function () {
29
+ var res = burrito.microwave('Math.sin(2)', function (node) {
30
+ if (node.name === 'num') node.wrap('Math.PI / %s');
31
+ });
32
+ assert.equal(res, 1);
33
+ };
@@ -0,0 +1,26 @@
1
+ var assert = require('assert');
2
+ var burrito = require('../');
3
+
4
+ exports.checkParent = function () {
5
+ var src = 'Math.tan(0) + Math.sin(0)';
6
+
7
+ var res = burrito.microwave(src, function (node) {
8
+ if (node.name === 'binary') {
9
+ node.wrap('%a - %b');
10
+ }
11
+ else if (node.name === 'num') {
12
+ assert.equal(node.parent().value[0][0], 'dot');
13
+
14
+ var fn = node.parent().value[0][2];
15
+ if (fn === 'sin') {
16
+ node.wrap('Math.PI / 2');
17
+ }
18
+ else if (fn === 'tan') {
19
+ node.wrap('Math.PI / 4');
20
+ }
21
+ else assert.fail('Unknown fn');
22
+ }
23
+ });
24
+
25
+ assert.equal(res, Math.tan(Math.PI / 4) - Math.sin(Math.PI / 2)); // ~ 0
26
+ };
@@ -0,0 +1,157 @@
1
+ var assert = require('assert');
2
+ var burrito = require('../');
3
+ var vm = require('vm');
4
+
5
+ exports.preserveTernaryParentheses = function () {
6
+ var originalSource = '"anything" + (x ? y : z) + "anything"';
7
+ var burritoSource = burrito(originalSource, function (node) {
8
+ // do nothing. we just want to check that ternary parens are persisted
9
+ });
10
+
11
+ var ctxt = {
12
+ x : false,
13
+ y : 'y_'+~~(Math.random()*10),
14
+ z : 'z_'+~~(Math.random()*10)
15
+ };
16
+
17
+ var expectedOutput = vm.runInNewContext(originalSource, ctxt);
18
+ var burritoOutput = vm.runInNewContext(burritoSource, ctxt);
19
+
20
+ assert.equal(burritoOutput, expectedOutput);
21
+
22
+ ctxt.x = true;
23
+
24
+ expectedOutput = vm.runInNewContext(originalSource, ctxt);
25
+ burritoOutput = vm.runInNewContext(burritoSource, ctxt);
26
+
27
+ assert.equal(burritoOutput, expectedOutput);
28
+ };
29
+
30
+ exports.wrapCalls = function () {
31
+ var src = burrito('f() && g(h())\nfoo()', function (node) {
32
+ if (node.name === 'call') node.wrap('qqq(%s)');
33
+ if (node.name === 'binary') node.wrap('bbb(%s)');
34
+ assert.ok(node.state);
35
+ assert.equal(this, node.state);
36
+ });
37
+
38
+ var tg = setTimeout(function () {
39
+ assert.fail('g() never called');
40
+ }, 5000);
41
+
42
+ var times = { bbb : 0, qqq : 0 };
43
+
44
+ var res = [];
45
+ vm.runInNewContext(src, {
46
+ bbb : function (x) {
47
+ times.bbb ++;
48
+ res.push(x);
49
+ return x;
50
+ },
51
+ qqq : function (x) {
52
+ times.qqq ++;
53
+ res.push(x);
54
+ return x;
55
+ },
56
+ f : function () { return true },
57
+ g : function (h) {
58
+ clearTimeout(tg);
59
+ assert.equal(h, 7);
60
+ return h !== 7
61
+ },
62
+ h : function () { return 7 },
63
+ foo : function () { return 'foo!' },
64
+ });
65
+
66
+ assert.deepEqual(res, [
67
+ true, // f()
68
+ 7, // h()
69
+ false, // g(h())
70
+ false, // f() && g(h())
71
+ 'foo!', // foo()
72
+ ]);
73
+ assert.equal(times.bbb, 1);
74
+ assert.equal(times.qqq, 4);
75
+ };
76
+
77
+ exports.wrapFn = function () {
78
+ var src = burrito('f(g(h(5)))', function (node) {
79
+ if (node.name === 'call') {
80
+ node.wrap(function (s) {
81
+ return 'z(' + s + ')';
82
+ });
83
+ }
84
+ });
85
+
86
+ var times = 0;
87
+ assert.equal(
88
+ vm.runInNewContext(src, {
89
+ f : function (x) { return x + 1 },
90
+ g : function (x) { return x + 2 },
91
+ h : function (x) { return x + 3 },
92
+ z : function (x) {
93
+ times ++;
94
+ return x * 10;
95
+ },
96
+ }),
97
+ (((((5 + 3) * 10) + 2) * 10) + 1) * 10
98
+ );
99
+ assert.equal(times, 3);
100
+ };
101
+
102
+ exports.binaryString = function () {
103
+ var src = 'z(x + y)';
104
+ var context = {
105
+ x : 3,
106
+ y : 4,
107
+ z : function (n) { return n * 10 },
108
+ };
109
+
110
+ var res = burrito.microwave(src, context, function (node) {
111
+ if (node.name === 'binary') {
112
+ node.wrap('%a*2 - %b*2');
113
+ }
114
+ });
115
+
116
+ assert.equal(res, 10 * (3*2 - 4*2));
117
+ };
118
+
119
+ exports.binaryFn = function () {
120
+ var src = 'z(x + y)';
121
+ var context = {
122
+ x : 3,
123
+ y : 4,
124
+ z : function (n) { return n * 10 },
125
+ };
126
+
127
+ var res = burrito.microwave(src, context, function (node) {
128
+ if (node.name === 'binary') {
129
+ node.wrap(function (expr, a, b) {
130
+ return '(' + a + ')*2 - ' + '(' + b + ')*2';
131
+ });
132
+ }
133
+ });
134
+
135
+ assert.equal(res, 10 * (3*2 - 4*2));
136
+ };
137
+
138
+ exports.intersperse = function () {
139
+ var src = '(' + (function () {
140
+ f();
141
+ g();
142
+ }).toString() + ')()';
143
+
144
+ var times = { f : 0, g : 0, zzz : 0 };
145
+
146
+ var context = {
147
+ f : function () { times.f ++ },
148
+ g : function () { times.g ++ },
149
+ zzz : function () { times.zzz ++ },
150
+ };
151
+
152
+ burrito.microwave(src, context, function (node) {
153
+ if (node.name === 'stat') node.wrap('{ zzz(); %s }');
154
+ });
155
+
156
+ assert.deepEqual(times, { f : 1, g : 1, zzz : 3 });
157
+ };
@@ -0,0 +1,39 @@
1
+ {
2
+ "name" : "detective",
3
+ "description" : "Find all calls to require() no matter how crazily nested using a proper walk of the AST",
4
+ "version" : "0.0.4",
5
+ "repository" : {
6
+ "type" : "git",
7
+ "url" : "git://github.com/substack/node-detective.git"
8
+ },
9
+ "main" : "index.js",
10
+ "keywords" : [
11
+ "require",
12
+ "source",
13
+ "analyze",
14
+ "ast"
15
+ ],
16
+ "directories" : {
17
+ "lib" : ".",
18
+ "example" : "example",
19
+ "test" : "test"
20
+ },
21
+ "scripts" : {
22
+ "test" : "expresso"
23
+ },
24
+ "dependencies" : {
25
+ "burrito" : "0.2.x"
26
+ },
27
+ "devDependencies" : {
28
+ "expresso" : "=0.7.x"
29
+ },
30
+ "engines" : {
31
+ "node" : ">=0.4.0"
32
+ },
33
+ "license" : "MIT",
34
+ "author" : {
35
+ "name" : "James Halliday",
36
+ "email" : "mail@substack.net",
37
+ "url" : "http://substack.net"
38
+ }
39
+ }
@@ -0,0 +1,10 @@
1
+ var assert = require('assert');
2
+ var detective = require('../');
3
+ var fs = require('fs');
4
+ var src = fs.readFileSync(__dirname + '/files/both.js');
5
+
6
+ exports.both = function () {
7
+ var modules = detective.find(src);
8
+ assert.deepEqual(modules.strings, [ 'a', 'b' ]);
9
+ assert.deepEqual(modules.expressions, [ '"c"+x', '"d"+y' ]);
10
+ };
@@ -0,0 +1,4 @@
1
+ require('a');
2
+ require('b');
3
+ require('c'+x);
4
+ var moo = require('d'+y).moo;
@@ -0,0 +1,22 @@
1
+
2
+ if (true) {
3
+ (function () {
4
+ require('a');
5
+ })();
6
+ }
7
+ if (false) {
8
+ (function () {
9
+ var x = 10;
10
+ switch (x) {
11
+ case 1 : require('b'); break;
12
+ default : break;
13
+ }
14
+ })()
15
+ }
16
+
17
+ function qqq () {
18
+ require
19
+ (
20
+ "c"
21
+ );
22
+ }
@@ -0,0 +1,13 @@
1
+ var a = require('a');
2
+ var b = require('b');
3
+ var c = require('c');
4
+ var abc = a.b(c);
5
+
6
+ var EventEmitter = require('events').EventEmitter;
7
+
8
+ var x = require('doom')(5,6,7);
9
+ x(8,9);
10
+ c.require('notthis');
11
+ var y = require('y') * 100;
12
+
13
+ var EventEmitter2 = require('events2').EventEmitter();
@@ -0,0 +1,13 @@
1
+ var a = load('a');
2
+ var b = load('b');
3
+ var c = load('c');
4
+ var abc = a.b(c);
5
+
6
+ var EventEmitter = load('events').EventEmitter;
7
+
8
+ var x = load('doom')(5,6,7);
9
+ x(8,9);
10
+ c.load('notthis');
11
+ var y = load('y') * 100;
12
+
13
+ var EventEmitter2 = load('events2').EventEmitter();
@@ -0,0 +1,8 @@
1
+ var assert = require('assert');
2
+ var detective = require('../');
3
+ var fs = require('fs');
4
+ var src = fs.readFileSync(__dirname + '/files/nested.js');
5
+
6
+ exports.nested = function () {
7
+ assert.deepEqual(detective(src), [ 'a', 'b', 'c' ]);
8
+ };