redcar 0.9.2 → 0.10

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.
Files changed (234) hide show
  1. data/CHANGES +34 -4
  2. data/Rakefile +2 -1
  3. data/lib/redcar.rb +3 -3
  4. data/lib/redcar/installer.rb +2 -3
  5. data/plugins/application/features/step_definitions/dialog_steps.rb +7 -0
  6. data/plugins/application/features/step_definitions/key_steps.rb +18 -0
  7. data/plugins/application/features/step_definitions/menu_steps.rb +5 -6
  8. data/plugins/application/features/step_definitions/speedbar_steps.rb +29 -9
  9. data/plugins/application/features/step_definitions/tree_steps.rb +13 -0
  10. data/plugins/application/features/support/env.rb +39 -5
  11. data/plugins/application/features/support/fake_event.rb +12 -0
  12. data/plugins/application/lib/application.rb +5 -6
  13. data/plugins/application/lib/application/dialog.rb +53 -10
  14. data/plugins/application/lib/application/dialogs/modeless_list_dialog.rb +85 -0
  15. data/plugins/application/lib/application/keymap.rb +10 -8
  16. data/plugins/application/lib/application/menu.rb +38 -16
  17. data/plugins/application/lib/application/treebook.rb +30 -0
  18. data/plugins/application/lib/application/window.rb +20 -2
  19. data/plugins/application/spec/application/command/executor_spec.rb +1 -0
  20. data/plugins/application/spec/application/menu_spec.rb +26 -26
  21. data/plugins/application/spec/application/treebook_spec.rb +6 -6
  22. data/plugins/application/spec/spec_helper.rb +10 -1
  23. data/plugins/application_swt/lib/application_swt.rb +25 -3
  24. data/plugins/application_swt/lib/application_swt/dialog_adapter.rb +48 -27
  25. data/plugins/application_swt/lib/application_swt/dialogs/filter_list_dialog_controller.rb +22 -11
  26. data/plugins/application_swt/lib/application_swt/dialogs/modeless_dialog.rb +113 -0
  27. data/plugins/application_swt/lib/application_swt/dialogs/modeless_html_dialog.rb +85 -0
  28. data/plugins/application_swt/lib/application_swt/dialogs/modeless_list_dialog_controller.rb +143 -0
  29. data/plugins/application_swt/lib/application_swt/gradient.rb +61 -0
  30. data/plugins/application_swt/lib/application_swt/menu/binding_translator.rb +4 -4
  31. data/plugins/application_swt/lib/application_swt/notebook.rb +5 -8
  32. data/plugins/application_swt/lib/application_swt/speedbar.rb +1 -0
  33. data/plugins/application_swt/lib/application_swt/treebook.rb +6 -8
  34. data/plugins/application_swt/lib/application_swt/window.rb +85 -57
  35. data/plugins/application_swt/lib/swt/graphics_utils.rb +23 -0
  36. data/plugins/application_swt/lib/swt/vtab_folder.rb +7 -0
  37. data/plugins/application_swt/lib/swt/vtab_label.rb +1 -1
  38. data/plugins/application_swt/spec/application_swt/gradient_spec.rb +142 -0
  39. data/plugins/auto_completer/lib/auto_completer.rb +10 -42
  40. data/plugins/auto_completer/lib/auto_completer/list_dialog.rb +21 -0
  41. data/plugins/clojure/lib/clojure.rb +33 -0
  42. data/plugins/{repl/lib/repl/clojure_mirror.rb → clojure/lib/clojure/repl_mirror.rb} +16 -20
  43. data/plugins/clojure/plugin.rb +9 -0
  44. data/plugins/{repl/spec/repl/clojure_mirror_spec.rb → clojure/spec/clojure/repl_mirror_spec.rb} +12 -13
  45. data/plugins/clojure/spec/spec_helper.rb +5 -0
  46. data/plugins/{repl → clojure}/vendor/Wrapper.clj +0 -0
  47. data/plugins/{repl → clojure}/vendor/dummy +0 -0
  48. data/plugins/{repl → clojure}/vendor/enclojure-wrapper.jar +0 -0
  49. data/plugins/connection_manager/lib/connection_manager.rb +13 -13
  50. data/plugins/declarations/lib/declarations.rb +17 -6
  51. data/plugins/document_search/features/find.feature +389 -0
  52. data/plugins/document_search/features/find_and_replace.feature +723 -0
  53. data/plugins/document_search/features/replace.feature +69 -62
  54. data/plugins/document_search/lib/document_search.rb +81 -64
  55. data/plugins/document_search/lib/document_search/commands.rb +258 -0
  56. data/plugins/document_search/lib/document_search/find_and_replace_speedbar.rb +142 -0
  57. data/plugins/document_search/lib/document_search/find_speedbar.rb +102 -0
  58. data/plugins/document_search/lib/document_search/query_options.rb +45 -0
  59. data/plugins/edit_view/features/case_change.feature +9 -5
  60. data/plugins/edit_view/features/step_definitions/editing_steps.rb +19 -0
  61. data/plugins/edit_view/lib/edit_view.rb +15 -12
  62. data/plugins/edit_view/lib/edit_view/actions/arrow_keys.rb +12 -2
  63. data/plugins/edit_view/lib/edit_view/commands/text_conversion_commands.rb +1 -1
  64. data/plugins/edit_view/lib/edit_view/document.rb +129 -99
  65. data/plugins/edit_view_swt/lib/edit_view_swt.rb +33 -15
  66. data/plugins/encryption/encryption.rb +2 -0
  67. data/plugins/find-in-project/lib/find_in_project.rb +3 -5
  68. data/plugins/find-in-project/lib/find_in_project/views/index.html.erb +2 -0
  69. data/plugins/groovy/features/step_definitions/groovy_steps.rb +2 -2
  70. data/plugins/groovy/features/syntax_check_groovy.feature +3 -3
  71. data/plugins/groovy/lib/groovy.rb +38 -0
  72. data/plugins/groovy/lib/groovy/commands.rb +10 -0
  73. data/plugins/{repl/lib/repl/groovy_mirror.rb → groovy/lib/groovy/repl_mirror.rb} +33 -13
  74. data/plugins/groovy/lib/{syntax_check/groovy.rb → groovy/syntax_checker.rb} +13 -8
  75. data/plugins/groovy/plugin.rb +5 -4
  76. data/plugins/{repl/spec/repl/groovy_mirror_spec.rb → groovy/spec/groovy/repl_mirror_spec.rb} +14 -13
  77. data/plugins/groovy/spec/spec_helper.rb +5 -0
  78. data/plugins/html_view/assets/json2.js +476 -0
  79. data/plugins/html_view/lib/html_view.rb +1 -0
  80. data/plugins/java/features/fixtures/test.java +0 -0
  81. data/plugins/java/features/support/env.rb +27 -0
  82. data/plugins/java/features/syntax_check_java.feature +86 -0
  83. data/plugins/java/lib/syntax_check/java.rb +86 -0
  84. data/plugins/java/plugin.rb +7 -0
  85. data/plugins/javascript/features/fixtures/test2.js +5 -0
  86. data/plugins/javascript/features/step_definitions/javascript_steps.rb +16 -0
  87. data/plugins/javascript/features/support/env.rb +14 -0
  88. data/plugins/javascript/features/syntax_check_javascript.feature +46 -3
  89. data/plugins/javascript/lib/syntax_check/javascript.rb +15 -9
  90. data/plugins/line_tools/features/trim_line.feature +49 -0
  91. data/plugins/line_tools/lib/line_tools.rb +5 -1
  92. data/plugins/mirah/README +7 -0
  93. data/plugins/mirah/features/fixtures/test.mirah +2 -0
  94. data/plugins/mirah/features/syntax_check_mirah.feature +46 -0
  95. data/plugins/mirah/lib/mirah.rb +43 -0
  96. data/plugins/mirah/lib/mirah/my_error_handler.rb +22 -0
  97. data/plugins/mirah/lib/mirah/repl_mirror.rb +50 -0
  98. data/plugins/mirah/lib/mirah/syntax_checker.rb +38 -0
  99. data/plugins/mirah/plugin.rb +8 -0
  100. data/plugins/mirah/spec/mirah/repl_mirror_spec.rb +188 -0
  101. data/plugins/mirah/spec/spec_helper.rb +5 -0
  102. data/plugins/mirah/vendor/mirah-parser.jar +0 -0
  103. data/plugins/pair_highlighter/lib/pair_highlighter/document_controller.rb +24 -23
  104. data/plugins/plugin_manager_ui/lib/plugin_manager_ui.rb +10 -1
  105. data/plugins/plugin_manager_ui/views/index.html.erb +2 -0
  106. data/plugins/project/features/find_file.feature +40 -16
  107. data/plugins/project/features/highlight_focussed_tab.feature +16 -10
  108. data/plugins/project/features/step_definitions/find_file_steps.rb +11 -0
  109. data/plugins/project/features/step_definitions/project_tree_steps.rb +5 -1
  110. data/plugins/project/features/support/env.rb +5 -0
  111. data/plugins/project/lib/project/commands.rb +8 -1
  112. data/plugins/project/lib/project/dir_controller.rb +4 -1
  113. data/plugins/project/lib/project/find_file_dialog.rb +16 -12
  114. data/plugins/project/lib/project/manager.rb +30 -1
  115. data/plugins/project_search/vendor/lucene/CHANGELOG +147 -0
  116. data/plugins/project_search/vendor/lucene/CONTRIBUTORS +17 -0
  117. data/plugins/project_search/vendor/lucene/Gemfile +9 -0
  118. data/plugins/project_search/vendor/lucene/Gemfile.lock +33 -0
  119. data/plugins/project_search/vendor/lucene/LICENSE +19 -0
  120. data/plugins/project_search/vendor/lucene/README.rdoc +283 -0
  121. data/plugins/project_search/vendor/lucene/Rakefile +35 -0
  122. data/plugins/project_search/vendor/lucene/examples/active_model/serializers.rb +25 -0
  123. data/plugins/project_search/vendor/lucene/examples/active_model/validation.rb +26 -0
  124. data/plugins/project_search/vendor/lucene/examples/admin/Rakefile +4 -0
  125. data/plugins/project_search/vendor/lucene/examples/admin/admin.rb +29 -0
  126. data/plugins/project_search/vendor/lucene/examples/admin/public/jquery.js +4376 -0
  127. data/plugins/project_search/vendor/lucene/examples/admin/public/neo4j.css +153 -0
  128. data/plugins/project_search/vendor/lucene/examples/admin/public/neo_admin.js +18 -0
  129. data/plugins/project_search/vendor/lucene/examples/admin/spec/admin_spec.rb +26 -0
  130. data/plugins/project_search/vendor/lucene/examples/admin/views/index.erb +21 -0
  131. data/plugins/project_search/vendor/lucene/examples/filetree/README.rdoc +9 -0
  132. data/plugins/project_search/vendor/lucene/examples/filetree/app.rb +7 -0
  133. data/plugins/project_search/vendor/lucene/examples/filetree/batch.props +5 -0
  134. data/plugins/project_search/vendor/lucene/examples/filetree/features/step_definitions/add_steps.rb +121 -0
  135. data/plugins/project_search/vendor/lucene/examples/filetree/features/support/env.rb +30 -0
  136. data/plugins/project_search/vendor/lucene/examples/filetree/features/support/rspec_helper.rb +50 -0
  137. data/plugins/project_search/vendor/lucene/examples/filetree/features/treesizes.feature +19 -0
  138. data/plugins/project_search/vendor/lucene/examples/imdb/1_create_neo_db.rb +66 -0
  139. data/plugins/project_search/vendor/lucene/examples/imdb/2_index_db.rb +23 -0
  140. data/plugins/project_search/vendor/lucene/examples/imdb/README +12 -0
  141. data/plugins/project_search/vendor/lucene/examples/imdb/find_actors.rb +56 -0
  142. data/plugins/project_search/vendor/lucene/examples/imdb/install.sh +12 -0
  143. data/plugins/project_search/vendor/lucene/examples/imdb/model.rb +37 -0
  144. data/plugins/project_search/vendor/lucene/examples/railway/README +111 -0
  145. data/plugins/project_search/vendor/lucene/examples/railway/railnet-app.rb +31 -0
  146. data/plugins/project_search/vendor/lucene/examples/railway/railnet-data.rb +42 -0
  147. data/plugins/project_search/vendor/lucene/examples/rest/example.rb +41 -0
  148. data/plugins/project_search/vendor/lucene/examples/you_might_know/YouMightKnow.java +60 -0
  149. data/plugins/project_search/vendor/lucene/examples/you_might_know/all_simple_paths.rb +34 -0
  150. data/plugins/project_search/vendor/lucene/examples/you_might_know/nodes.rb +34 -0
  151. data/plugins/project_search/vendor/lucene/examples/you_might_know/you_might_know.rb +50 -0
  152. data/plugins/project_search/vendor/lucene/lib/lucene.rb +15 -0
  153. data/plugins/project_search/vendor/lucene/lib/lucene/config.rb +145 -0
  154. data/plugins/project_search/vendor/lucene/lib/lucene/document.rb +96 -0
  155. data/plugins/project_search/vendor/lucene/lib/lucene/field_info.rb +144 -0
  156. data/plugins/project_search/vendor/lucene/lib/lucene/hits.rb +54 -0
  157. data/plugins/project_search/vendor/lucene/lib/lucene/index.rb +267 -0
  158. data/plugins/project_search/vendor/lucene/lib/lucene/index_info.rb +146 -0
  159. data/plugins/project_search/vendor/lucene/lib/lucene/index_searcher.rb +157 -0
  160. data/plugins/project_search/vendor/lucene/lib/lucene/jars.rb +5 -0
  161. data/plugins/project_search/vendor/lucene/lib/lucene/query_dsl.rb +135 -0
  162. data/plugins/project_search/vendor/lucene/lib/lucene/transaction.rb +117 -0
  163. data/plugins/project_search/vendor/lucene/lib/lucene/version.rb +3 -0
  164. data/plugins/project_search/vendor/lucene/lucene.gemspec +23 -0
  165. data/plugins/project_search/vendor/lucene/spec/lucene/document_spec.rb +32 -0
  166. data/plugins/project_search/vendor/lucene/spec/lucene/field_info_spec.rb +70 -0
  167. data/plugins/project_search/vendor/lucene/spec/lucene/index_info_spec.rb +76 -0
  168. data/plugins/project_search/vendor/lucene/spec/lucene/index_spec.rb +643 -0
  169. data/plugins/project_search/vendor/lucene/spec/lucene/query_dsl_spec.rb +142 -0
  170. data/plugins/project_search/vendor/lucene/spec/lucene/sort_spec.rb +101 -0
  171. data/plugins/project_search/vendor/lucene/spec/lucene/spec_helper.rb +10 -0
  172. data/plugins/project_search/vendor/lucene/spec/lucene/transaction_spec.rb +118 -0
  173. data/plugins/redcar/features/alter_font_size.feature +25 -0
  174. data/plugins/redcar/features/step_definitions/font_steps.rb +34 -0
  175. data/plugins/redcar/redcar.rb +256 -43
  176. data/plugins/repl/features/command_editing.feature +55 -0
  177. data/plugins/repl/features/command_history.feature +75 -0
  178. data/plugins/repl/features/step_definitions/repl_steps.rb +17 -1
  179. data/plugins/repl/features/support/env.rb +24 -0
  180. data/plugins/repl/features/support/fake_repl.rb +16 -0
  181. data/plugins/repl/lib/repl.rb +17 -74
  182. data/plugins/repl/lib/repl/repl_command.rb +20 -0
  183. data/plugins/repl/lib/repl/repl_mirror.rb +168 -22
  184. data/plugins/repl/lib/repl/repl_tab.rb +131 -6
  185. data/plugins/repl/plugin.rb +1 -1
  186. data/plugins/repl/spec/repl/repl_mirror_spec.rb +72 -0
  187. data/plugins/repl/spec/spec_helper.rb +1 -1
  188. data/plugins/repl_swt/lib/repl_swt.rb +7 -0
  189. data/plugins/repl_swt/lib/repl_swt/key_listener.rb +43 -0
  190. data/plugins/repl_swt/plugin.rb +8 -0
  191. data/plugins/ruby/lib/ruby.rb +35 -0
  192. data/plugins/{repl/lib/repl/ruby_mirror.rb → ruby/lib/ruby/repl_mirror.rb} +12 -12
  193. data/plugins/ruby/lib/{syntax_check/ruby.rb → ruby/syntax_checker.rb} +3 -3
  194. data/plugins/ruby/plugin.rb +5 -4
  195. data/plugins/{repl/spec/repl/ruby_mirror_spec.rb → ruby/spec/ruby/repl_mirror_spec.rb} +38 -29
  196. data/plugins/ruby/spec/spec_helper.rb +5 -0
  197. data/plugins/runnables/lib/runnables.rb +2 -0
  198. data/plugins/runnables/lib/runnables/command_output_controller.rb +5 -0
  199. data/plugins/runnables/lib/runnables/output_processor.rb +14 -3
  200. data/plugins/runnables/views/command_output.html.erb +3 -2
  201. data/plugins/scm/lib/scm.rb +4 -2
  202. data/plugins/scm/lib/scm/diff_mirror.rb +6 -6
  203. data/plugins/scm_git/lib/scm_git.rb +136 -107
  204. data/plugins/scm_git/lib/scm_git/change.rb +28 -19
  205. data/plugins/snippets/lib/snippets/explorer.rb +2 -2
  206. data/plugins/swt/lib/swt/full_swt.rb +1 -0
  207. data/plugins/syntax_check/features/step_definitions/syntax_check_steps.rb +4 -0
  208. data/plugins/syntax_check/features/support/env.rb +3 -0
  209. data/plugins/syntax_check/lib/syntax_check.rb +71 -5
  210. data/plugins/syntax_check/lib/syntax_check/annotation.rb +61 -0
  211. data/plugins/test_runner/lib/test_runner.rb +39 -0
  212. data/plugins/test_runner/lib/test_runner/rspec_runner.rb +20 -0
  213. data/plugins/test_runner/lib/test_runner/run_test_command.rb +63 -0
  214. data/plugins/test_runner/lib/test_runner/runnable_test_runner.rb +26 -0
  215. data/plugins/test_runner/plugin.rb +8 -0
  216. data/plugins/test_runner/spec/run_test_command_spec.rb +51 -0
  217. data/plugins/test_runner/spec/spec_helper.rb +5 -0
  218. data/plugins/textmate/lib/textmate.rb +12 -2
  219. data/plugins/textmate/vendor/redcar-bundles/Bundles/HTML.tmbundle/Syntaxes/HTML.plist +0 -2
  220. data/plugins/textmate/vendor/redcar-bundles/Bundles/Mirah.tmbundle/Syntaxes/Mirah.plist +22 -0
  221. data/plugins/textmate/vendor/redcar-bundles/Bundles/Mirah.tmbundle/info.plist +12 -0
  222. data/plugins/textmate/vendor/redcar-bundles/Bundles/Ruby.tmbundle/Syntaxes/Ruby.plist +2 -0
  223. data/plugins/todo_list/lib/todo_list.rb +7 -0
  224. data/plugins/todo_list/lib/todo_list/todo_controller.rb +3 -1
  225. data/plugins/tree/lib/tree.rb +4 -0
  226. data/plugins/tree_view_swt/lib/tree_view_swt.rb +5 -0
  227. data/plugins/web_bookmarks/lib/web_bookmarks.rb +10 -0
  228. metadata +137 -22
  229. data/plugins/document_search/features/search.feature +0 -163
  230. data/plugins/document_search/lib/document_search/replace_all_command.rb +0 -27
  231. data/plugins/document_search/lib/document_search/replace_command.rb +0 -38
  232. data/plugins/document_search/lib/document_search/replace_next_command.rb +0 -27
  233. data/plugins/document_search/lib/document_search/search_and_replace.rb +0 -81
  234. data/plugins/ruby/README +0 -6
@@ -19,6 +19,7 @@ module Redcar
19
19
  def self.keymaps
20
20
  map = Redcar::Keymap.build("main", [:osx, :linux, :windows]) do
21
21
  link "Alt+Shift+B", ToggleBrowserBar
22
+ link "Alt+Shift+P", FileWebPreview
22
23
  end
23
24
  [map]
24
25
  end
File without changes
@@ -0,0 +1,27 @@
1
+ After do
2
+ # Truncate the test file
3
+ File.open(File.expand_path("../../fixtures/test.java", __FILE__), "w")
4
+
5
+ #recreate the classpath file
6
+ File.open(File.expand_path("../../fixtures/.redcar/classpath.groovy", __FILE__), "w") do |f|
7
+ f.puts <<-CONFIG
8
+ def redcar_config = new File(getClass().protectionDomain.codeSource.location.path).parentFile
9
+ def project = redcar_config.parentFile
10
+ def classpath = []
11
+
12
+ //installed libraries
13
+ def lib = new File(project.path + File.separator + "lib")
14
+ lib.list().each {name -> classpath << lib.path+File.separator+name}
15
+
16
+ //compiled classes
17
+ def target_classes = new File(
18
+ project.path + File.separator +
19
+ "target" + File.separator +
20
+ "classes"
21
+ )
22
+ classpath << target_classes.path
23
+
24
+ return classpath.toArray()
25
+ CONFIG
26
+ end
27
+ end
@@ -0,0 +1,86 @@
1
+ Feature: Syntax Checking for Java
2
+ As a user
3
+ I want to get annotations on syntax errors in Java files
4
+
5
+ Background:
6
+ When I have opened "plugins/java/features/fixtures/test.java"
7
+
8
+ Scenario: A syntax-clean Java file has no syntax error annotations
9
+ When I replace the contents with "class Foo {\n\n}"
10
+ And I save the tab
11
+ Then the tab should not have annotations
12
+
13
+ Scenario: A syntax-error in a Java file should cause syntax error annotations
14
+ When I replace the contents with "class Foo {\n int\n}"
15
+ And I save the tab
16
+ And I wait "2.5" seconds
17
+ Then the tab should have annotations
18
+ And the tab should have an annotation on line 2
19
+
20
+ Scenario: Fixing a syntax-error in a Java file should cause syntax error annotations to vanish
21
+ When I replace the contents with "class Foo {\n int\n}"
22
+ And I save the tab
23
+ And I wait "2.5" seconds
24
+ Then the tab should have annotations
25
+ When I replace the contents with "class Foo {\n\n}"
26
+ And I wait "2.5" seconds
27
+ And I save the tab
28
+ Then the tab should not have annotations
29
+
30
+ Scenario: If java is excluded from being checked, I should see no syntax errors
31
+ Given I excluded "java" files from being checked for syntax errors
32
+ When I replace the contents with "class Foo {\n int\n}"
33
+ And I save the tab
34
+ And I wait "2.5" seconds
35
+ Then the tab should not have annotations
36
+
37
+ Scenario: A file which references unknown java classes should cause syntax error annotations
38
+ And I replace the contents with "class Foo {\n Bar x = new Bar(10);\n FooBar y = new FooBar();\n}"
39
+ And I save the tab
40
+ And I wait "2.5" seconds
41
+ Then the tab should have annotations
42
+ And the tab should have an annotation on line 2
43
+
44
+ Scenario: A project can add libraries and compiled class directories to the java classpath
45
+ When I will choose "plugins/java/features/fixtures" from the "open_directory" dialog
46
+ And I open a directory
47
+ And I replace the contents with "class Foo {\n Bar x = new Bar(10);\n FooBar y = new FooBar();\n}"
48
+ And I save the tab
49
+ And I wait "2.5" seconds
50
+ Then the tab should not have annotations
51
+
52
+ Scenario: If a project classpath.java file has syntax errors, there should be an error message and annotations
53
+ And I close the focussed tab
54
+ Given I have not suppressed syntax checking message dialogs
55
+ When I will choose "plugins/java/features/fixtures" from the "open_directory" dialog
56
+ And I open a directory
57
+ And I have opened "plugins/java/features/fixtures/.redcar/classpath.groovy"
58
+ And I replace the contents with "def x = 4\nsdef"
59
+ And I save the tab
60
+ Then I should see a message box containing "An error occurred while loading classpath file"
61
+
62
+ Scenario: If an error occurs while parsing a java file, there should be an error message
63
+ Given I have not suppressed syntax checking message dialogs
64
+ When I will choose "plugins/java/features/fixtures" from the "open_directory" dialog
65
+ And I open a directory
66
+ And I add "lib2" to the "java" classpath
67
+ And I replace the contents with "class Foo {\n Bar x = new Bar(10);\n FooBaz y = new FooBaz();\n}"
68
+ And I save the tab
69
+ Then I should see a message box containing "An error occurred while parsing"
70
+ And the tab should not have annotations
71
+
72
+ Scenario: If syntax message dialogs are suppressed, I should see no message boxes
73
+ Given I have suppressed syntax checking message dialogs
74
+ When I will choose "plugins/java/features/fixtures" from the "open_directory" dialog
75
+ And I open a directory
76
+ And I have opened "plugins/java/features/fixtures/.redcar/classpath.groovy"
77
+ And I replace the contents with "sdef"
78
+ And I save the tab
79
+ And I wait "2.5" seconds
80
+ Then the tab should not have annotations
81
+ When I close the focussed tab
82
+ And I add "lib2" to the "java" classpath
83
+ And I replace the contents with "class Foo {\n Bar x = new Bar(10);\n FooBaz y = new FooBaz();\n}"
84
+ And I save the tab
85
+ And I wait "2.5" seconds
86
+ And the tab should have annotations
@@ -0,0 +1,86 @@
1
+ require 'java'
2
+ require 'open3'
3
+ module Redcar
4
+ module SyntaxCheck
5
+ class Java < Checker
6
+ supported_grammars "Java"
7
+
8
+ def check(*args)
9
+ path = manifest_path(doc)
10
+ name = File.basename(path)
11
+ temp = java.lang.System.getProperty('java.io.tmpdir')
12
+ if t = Java.thread and t.alive? and t[:java]
13
+ t.exit
14
+ SyntaxCheck.remove_syntax_error_annotations(doc.edit_view)
15
+ end
16
+ Java.thread=Thread.new do
17
+ Thread.current[:java] = true
18
+ begin
19
+ cmd = "javac -d #{temp}"
20
+ if project = Project::Manager.focussed_project and
21
+ cpath = classpath(project)
22
+ cmd << " -cp \"#{cpath}\""
23
+ end
24
+ stdin,stdout,err = Open3.popen3("#{cmd} #{path}")
25
+ err.each_line do |msg|
26
+ if msg =~ /#{Regexp.escape(name)}:(\d+):(.*)/
27
+ SyntaxCheck::Error.new(doc, $1.to_i - 1, $2).annotate
28
+ sleep 1
29
+ end
30
+ end
31
+ rescue Object => e
32
+ SyntaxCheck.message(
33
+ "An error occurred while parsing #{name}: #{e.message}", :error)
34
+ end
35
+ end
36
+ end
37
+
38
+ def classpath_files(project)
39
+ project.config_files("classpath.groovy")
40
+ end
41
+
42
+ def classpath(project)
43
+ unless @loaded
44
+ require File.join(Redcar.asset_dir,"groovy-all")
45
+ import 'groovy.lang.GroovyShell'
46
+ import 'org.codehaus.groovy.control.CompilationFailedException'
47
+ import 'org.codehaus.groovy.control.CompilerConfiguration'
48
+ @loaded = true
49
+ end
50
+ parts = []
51
+ shell = GroovyShell.new
52
+ files = classpath_files(project)
53
+ return unless files.any?
54
+ files.each do |path|
55
+ begin
56
+ file = java.io.File.new(path)
57
+ part = shell.run(file, [])
58
+ parts += part if part
59
+ rescue Object => e
60
+ SyntaxCheck.message(
61
+ "An error occurred while loading classpath file #{path}: #{e.message}",:error)
62
+ end
63
+ end
64
+ build_classpath(parts)
65
+ end
66
+
67
+ def build_classpath(parts)
68
+ composite = ""
69
+ separator = java.lang.System.getProperty('path.separator')
70
+ parts.each {|p| composite << p+separator}
71
+ composite[0,composite.length-1] if composite.length > 0
72
+ composite
73
+ end
74
+
75
+ private
76
+
77
+ def self.thread
78
+ @thread
79
+ end
80
+
81
+ def self.thread=(thread)
82
+ @thread = thread
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,7 @@
1
+ Plugin.define do
2
+ name "java"
3
+ version "0.1"
4
+ file "lib", "syntax_check", "java"
5
+ object "Redcar::SyntaxCheck::Java"
6
+ dependencies "syntax_check", ">0"
7
+ end
@@ -0,0 +1,5 @@
1
+ boo foo
2
+ baz
3
+ bee
4
+ baux
5
+ beau
@@ -0,0 +1,16 @@
1
+ When /^I save the tab (\d+) times and wait (\d+) seconds each time$/ do |count,time|
2
+ count = count.to_i
3
+ time = time.to_i
4
+ (1..count).each do |i|
5
+ begin
6
+ When "I save the tab"
7
+ When "I wait #{time} seconds"
8
+ rescue => e
9
+ add_exception(e)
10
+ end
11
+ end
12
+ end
13
+
14
+ Then /^the tab should not have thrown SWT concurrency exceptions$/ do
15
+ exception_count.should == 0
16
+ end
@@ -1,4 +1,18 @@
1
1
  After do
2
2
  # Truncate the test file
3
3
  File.open(File.expand_path("../../fixtures/test.js", __FILE__), "w")
4
+ @exceptions = 0
5
+ end
6
+
7
+ Before do
8
+ @exceptions = 0
9
+ end
10
+
11
+ def add_exception(e)
12
+ @exceptions = @exceptions + 1
13
+ p e.message
14
+ end
15
+
16
+ def exception_count
17
+ @exceptions
4
18
  end
@@ -13,15 +13,58 @@ Feature: Syntax Checking for JavaScript
13
13
  Scenario: A syntax-error in a JavaScript file should cause syntax error annotations
14
14
  When I replace the contents with "var foo = 1;\nbar"
15
15
  And I save the tab
16
- And I wait "1.5" seconds
16
+ And I wait 2 seconds
17
17
  Then the tab should have annotations
18
18
  And the tab should have an annotation on line 2
19
19
 
20
20
  Scenario: Fixing a syntax-error in a JavaScript file should cause syntax error annotations to vanish
21
21
  When I replace the contents with "var foo = 1;\nbar"
22
22
  And I save the tab
23
- And I wait "1.5" seconds
23
+ And I wait 2 seconds
24
24
  Then the tab should have annotations
25
25
  When I replace the contents with "var foo = 1;\nvar bar;"
26
26
  And I save the tab
27
- Then the tab should not have annotations
27
+ Then the tab should not have annotations
28
+
29
+ Scenario: Checking for syntax errors on a file with syntax errors should not cause concurrency errors
30
+ When I replace the contents with "foo\nbar\nfunction\nbax\nboo\nbonne"
31
+ And I save the tab 10 times and wait 2 seconds each time
32
+ Then the tab should not have thrown SWT concurrency exceptions
33
+
34
+ Scenario: Checking for syntax errors between two different error-throwing files should not cause concurrency errors
35
+ When I replace the contents with "foo\nbar\nfunction\nbax\nboo\nbonne"
36
+ And I have opened "plugins/javascript/features/fixtures/test2.js"
37
+ And I replace the contents with "boo foo\nbaz\nbee\nbaux\nbeau"
38
+ And I save the tab
39
+ And I wait 1 seconds
40
+ And I switch up a tab
41
+ And I save the tab
42
+ And I wait 1 seconds
43
+ And I switch down a tab
44
+ And I save the tab
45
+ And I wait 1 seconds
46
+ And I switch up a tab
47
+ And I save the tab
48
+ And I wait 1 seconds
49
+ Then the tab should not have thrown SWT concurrency exceptions
50
+ And the tab should have annotations
51
+ When I switch down a tab
52
+ Then the tab should have annotations
53
+
54
+ Scenario: Checking rapidly for syntax errors between two files should not cause concurrency errors
55
+ When I replace the contents with "foo\nbar\nfunction\nbax\nboo\nbonne"
56
+ And I have opened "plugins/javascript/features/fixtures/test2.js"
57
+ And I replace the contents with "boo foo\nbaz\nbee\nbaux\nbeau"
58
+ And I save the tab
59
+ And I switch up a tab
60
+ And I save the tab
61
+ And I switch down a tab
62
+ And I save the tab
63
+ And I switch up a tab
64
+ And I save the tab
65
+ And I wait 5 seconds
66
+ Then the tab should not have thrown SWT concurrency exceptions
67
+ And the tab should have annotations
68
+ When I switch down a tab
69
+ Then the tab should have annotations
70
+
@@ -1,4 +1,3 @@
1
- require 'java'
2
1
 
3
2
  module Redcar
4
3
  module SyntaxCheck
@@ -14,21 +13,28 @@ module Redcar
14
13
  File.join(Redcar.asset_dir,'js.jar')
15
14
  end
16
15
 
16
+ def main_method
17
+ "org.mozilla.javascript.tools.shell.Main"
18
+ end
19
+
17
20
  def check(*args)
18
- path = manifest_path(doc)
19
- name = File.basename(path)
20
- text = doc.get_all_text
21
- if t = JavaScript.thread and t.alive? and t[:js]
22
- t.exit
23
- SyntaxCheck.remove_syntax_error_annotations(doc.edit_view)
21
+ path = manifest_path(doc)
22
+ name = File.basename(path)
23
+ if t = JavaScript.thread and t.alive?
24
+ if t[:doc] and t[:doc] == doc
25
+ t.exit
26
+ SyntaxCheck.remove_syntax_error_annotations(doc.edit_view)
27
+ end
24
28
  end
25
29
  JavaScript.thread=Thread.new do
26
- Thread.current[:js] = true
30
+ SyntaxCheck.remove_syntax_error_annotations(doc.edit_view)
31
+ Thread.current[:doc] = doc
27
32
  begin
28
- output = `java -cp #{rhino_path} org.mozilla.javascript.tools.shell.Main #{jslint_path} #{path}`
33
+ output = `java -cp #{rhino_path} #{main_method} #{jslint_path} #{path}`
29
34
  output.each_line do |line|
30
35
  if line =~ /Lint at line (\d+) character (\d+): (.*)/
31
36
  SyntaxCheck::Error.new(doc, $1.to_i-1, $3).annotate
37
+ sleep 1
32
38
  end
33
39
  end
34
40
  rescue Object => e
@@ -22,3 +22,52 @@ Scenario: Trimming a line with unicode
22
22
  And I move the cursor to 5
23
23
  And I trim the line
24
24
  Then the contents should be "foo\nb\nbaz"
25
+
26
+ Scenario: Trimming a line with Windows line endings
27
+ When I open a new edit tab
28
+ And I replace the contents with "foo\r\nbść\r\nbaz"
29
+ And I move the cursor to 6
30
+ And I trim the line
31
+ Then the contents should be "foo\r\nb\r\nbaz"
32
+
33
+ Scenario: Trimming empty line removes newline character
34
+ When I open a new edit tab
35
+ And I replace the contents with "foo\n\nbaz"
36
+ And I move the cursor to 4
37
+ And I trim the line
38
+ Then the contents should be "foo\nbaz"
39
+
40
+ Scenario: Trimming empty line removes newline character (Windows)
41
+ When I open a new edit tab
42
+ And I replace the contents with "foo\r\n\r\nbaz"
43
+ And I move the cursor to 5
44
+ And I trim the line
45
+ Then the contents should be "foo\r\nbaz"
46
+
47
+ Scenario: Trimming when at end of line removes newline character
48
+ When I open a new edit tab
49
+ And I replace the contents with "foo\nbść\nbaz"
50
+ And I move the cursor to 7
51
+ And I trim the line
52
+ Then the contents should be "foo\nbśćbaz"
53
+
54
+ Scenario: Trimming when at end of file and newline absent it does nothing
55
+ When I open a new edit tab
56
+ And I replace the contents with "foo\nbść\nbaz"
57
+ And I move the cursor to 11
58
+ And I trim the line
59
+ Then the contents should be "foo\nbść\nbaz"
60
+
61
+ Scenario: Trimming when just before last newline character it removes it
62
+ When I open a new edit tab
63
+ And I replace the contents with "foo\nbść\nbaz\n"
64
+ And I move the cursor to 11
65
+ And I trim the line
66
+ Then the contents should be "foo\nbść\nbaz"
67
+
68
+ Scenario: Trimming when at end of file and newline present it does nothing
69
+ When I open a new edit tab
70
+ And I replace the contents with "foo\nbść\nbaz\n"
71
+ And I move the cursor to 12
72
+ And I trim the line
73
+ Then the contents should be "foo\nbść\nbaz\n"
@@ -92,7 +92,11 @@ module Redcar
92
92
  text = doc.get_slice(offset, doc.offset_at_line_end(line_ix))
93
93
  end
94
94
  doc.controllers(Redcar::AutoIndenter::DocumentController).first.disable do
95
- doc.replace(offset, text.split(//).length, "\n")
95
+ if text == doc.line_delimiter or text == ""
96
+ doc.replace(offset, text.split(//).length, "")
97
+ else
98
+ doc.replace(offset, text.split(//).length, doc.line_delimiter)
99
+ end
96
100
  end
97
101
  #doc.cursor_offset = doc.cursor_offset - 1
98
102
  end
@@ -0,0 +1,7 @@
1
+ == Syntax checking for Mirah in Redcar
2
+
3
+ Complains and suggestions
4
+ Michal Hantl michal.hantl@gmail.com
5
+
6
+ Thank you
7
+ Delisa Mason, Rib Rdb, Nick Howard