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
@@ -0,0 +1,2 @@
1
+ def foo
2
+ end
@@ -0,0 +1,46 @@
1
+ Feature: Syntax Checking for Mirah
2
+ As a user
3
+ I want to get annotations on syntax errors and warnings in Mirah files
4
+
5
+ Background:
6
+ When I have opened "plugins/mirah/features/fixtures/test.mirah"
7
+
8
+ Scenario: A syntax-clean Mirah file has no syntax error annotations
9
+ When I replace the contents with "def foo\n bar\nend"
10
+ And I save the tab
11
+ And I wait 2 seconds
12
+ Then the tab should not have annotations
13
+
14
+ Scenario: A syntax-error in a Mirah file should cause syntax error annotations
15
+ When I replace the contents with "def foo\n => bar\nend"
16
+ And I save the tab
17
+ And I wait 2 seconds
18
+ Then the tab should have annotations
19
+ And the tab should have an annotation on line 2
20
+
21
+ Scenario: A syntax-warning in a Mirah file should cause syntax warning annotations
22
+ When I replace the contents with "def foo\n end"
23
+ And I save the tab
24
+ And I wait 2 seconds
25
+ Then the tab should have annotations
26
+ And the tab should have an annotation on line 2
27
+
28
+ Scenario: Fixing a syntax-error in a Mirah file should cause syntax error annotations to vanish
29
+ When I replace the contents with "def foo\n => bar\nend"
30
+ And I save the tab
31
+ And I wait 2 seconds
32
+ Then the tab should have annotations
33
+ When I replace the contents with "def foo\n bar\nend"
34
+ And I save the tab
35
+ And I wait 2 seconds
36
+ Then the tab should not have annotations
37
+
38
+ Scenario: Fixing a syntax-warning in a Mirah file should cause syntax error annotations to vanish
39
+ When I replace the contents with "def foo\n end"
40
+ And I save the tab
41
+ And I wait 2 seconds
42
+ Then the tab should have annotations
43
+ When I replace the contents with "def foo\nend"
44
+ And I save the tab
45
+ And I wait 2 seconds
46
+ Then the tab should not have annotations
@@ -0,0 +1,43 @@
1
+
2
+ require 'java'
3
+ require 'mirah/syntax_checker'
4
+ require 'mirah/repl_mirror'
5
+
6
+ module Redcar
7
+ class Mirah
8
+
9
+ def self.menus
10
+ Menu::Builder.build do
11
+ sub_menu "Plugins" do
12
+ sub_menu "REPL" do
13
+ item "Open Mirah REPL", MirahOpenREPL
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ def self.load_dependencies
20
+ unless @loaded
21
+ require File.join(File.dirname(__FILE__),'..','vendor','mirah-parser')
22
+ import 'mirah.impl.MirahParser'
23
+ import 'jmeta.ErrorHandler'
24
+ require 'mirah/my_error_handler'
25
+ @loaded = true
26
+ end
27
+ end
28
+
29
+ def self.storage
30
+ @storage ||= begin
31
+ storage = Plugin::Storage.new('mirah')
32
+ storage.set_default('check_for_warnings', true)
33
+ storage
34
+ end
35
+ end
36
+
37
+ class MirahOpenREPL < Redcar::REPL::OpenREPL
38
+ def execute
39
+ open_repl(ReplMirror.new)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,22 @@
1
+
2
+ module Redcar
3
+ class Mirah
4
+ class MyErrorHandler
5
+ include ErrorHandler
6
+
7
+ def problem(m)
8
+ (@problems||=[]) << m
9
+ end
10
+
11
+ def problems
12
+ @problems || []
13
+ end
14
+
15
+ def warning(messages, positions)
16
+ messages.length.times { |i|
17
+ problem "Warning: #{messages[i]} #{positions[i]}"
18
+ }
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,50 @@
1
+
2
+ module Redcar
3
+ class Mirah
4
+ class ReplMirror < Redcar::REPL::ReplMirror
5
+
6
+ def title
7
+ "Mirah REPL"
8
+ end
9
+
10
+ def grammar_name
11
+ "Ruby REPL"
12
+ end
13
+
14
+ def prompt
15
+ ">>"
16
+ end
17
+
18
+ def format_error(e)
19
+ backtrace = e.backtrace.reject{|l|
20
+ l =~ /(repl_mirror|redcar)/
21
+ }
22
+ backtrace.unshift("(repl):1")
23
+ "#{e.class}: #{e.message}\n #{backtrace.join("\n ")}"
24
+ end
25
+
26
+ def evaluator
27
+ @evaluator ||= ReplMirror::Evaluator.new
28
+ end
29
+
30
+ class Evaluator
31
+ attr_reader :output
32
+
33
+ def initialize
34
+ Mirah.load_dependencies
35
+ @binding = binding
36
+ @impl = Java::MirahImpl::Mirah.new
37
+ @output = nil
38
+ end
39
+
40
+ def inspect
41
+ "main"
42
+ end
43
+
44
+ def execute(command)
45
+ @impl.instance_eval(command).inspect
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,38 @@
1
+
2
+ module Redcar
3
+ class Mirah
4
+ class SyntaxChecker < Redcar::SyntaxCheck::Checker
5
+ supported_grammars "Mirah"
6
+
7
+ def check(*args)
8
+ Mirah.load_dependencies
9
+ check_warnings = Mirah.storage['check_for_warnings']
10
+ path = manifest_path(doc)
11
+
12
+ parser = MirahParser.new
13
+ parser.filename = path
14
+
15
+ handler = MyErrorHandler.new
16
+ parser.errorHandler = handler
17
+
18
+ begin
19
+ parser.parse(IO.read(path))
20
+ rescue
21
+ m = $!.message
22
+ error = m.split(" (").first
23
+ if info = m.match(/line: ([0-9]+), char: ([0-9]+)\)/)
24
+ SyntaxCheck::Error.new(doc, info[1].to_i-1, error).annotate
25
+ end
26
+ end
27
+
28
+ if check_warnings
29
+ handler.problems.each do |problem|
30
+ if info = problem.match(/line: ([0-9]+), char: ([0-9]+)\)/)
31
+ SyntaxCheck::Warning.new(doc, info[1].to_i-1, problem.split(" (").first).annotate
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,8 @@
1
+ Plugin.define do
2
+ name "mirah"
3
+ version "1.0"
4
+ file "lib", "mirah"
5
+ object "Redcar::Mirah"
6
+ dependencies "syntax_check", ">0",
7
+ "repl", ">0"
8
+ end
@@ -0,0 +1,188 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
+
3
+ class Redcar::Mirah
4
+ describe ReplMirror do
5
+ before do
6
+ @mirror = ReplMirror.new
7
+ @changed_event = false
8
+ @mirror.add_listener(:change) { @changed_event = true }
9
+ end
10
+
11
+ def commit_test_text1
12
+ text = <<-MIRAH
13
+ # Mirah REPL
14
+ # type 'help' for help
15
+
16
+ >> $internal_repl_test = 707
17
+ MIRAH
18
+ @mirror.commit(text.chomp)
19
+ end
20
+
21
+ def result_test_text1
22
+ (<<-MIRAH).chomp
23
+ # Mirah REPL
24
+ # type 'help' for help
25
+
26
+ >> $internal_repl_test = 707
27
+ => 707
28
+ >>
29
+ MIRAH
30
+ end
31
+
32
+ def commit_test_text2
33
+ text = <<-MIRAH
34
+ # Mirah REPL
35
+ # type 'help' for help
36
+
37
+ >> $internal_repl_test = 707
38
+ => 707
39
+ >> $internal_repl_test = 909
40
+ MIRAH
41
+ @mirror.commit(text.chomp)
42
+ text.chomp
43
+ end
44
+
45
+ def result_test_text2
46
+ (<<-MIRAH).chomp
47
+ # Mirah REPL
48
+ # type 'help' for help
49
+
50
+ >> $internal_repl_test = 707
51
+ => 707
52
+ >> $internal_repl_test = 909
53
+ => 909
54
+ >>
55
+ MIRAH
56
+ end
57
+
58
+
59
+ def commit_no_input
60
+ text = <<-MIRAH
61
+ # Mirah REPL
62
+ # type 'help' for help
63
+
64
+ >>
65
+ MIRAH
66
+ @mirror.commit(text)
67
+ end
68
+
69
+ def prompt
70
+ "# Mirah REPL\n\n"
71
+ end
72
+
73
+ describe "with no history" do
74
+ it "should exist" do
75
+ @mirror.should be_exist
76
+ end
77
+
78
+ it "should have a message and a prompt" do
79
+ @mirror.read.should == (<<-MIRAH).chomp
80
+ # Mirah REPL
81
+ # type 'help' for help
82
+
83
+ >>
84
+ MIRAH
85
+ end
86
+
87
+ it "should have a title" do
88
+ @mirror.title.should == "Mirah REPL"
89
+ end
90
+
91
+ it "should not be changed" do
92
+ @mirror.should_not be_changed
93
+ end
94
+
95
+ describe "when executing" do
96
+ it "should execute committed text" do
97
+ commit_test_text1
98
+ $internal_repl_test.should == 707
99
+ end
100
+
101
+ it "should allow committing nothing as the first command" do
102
+ commit_no_input
103
+ @mirror.read.should == "# Mirah REPL\n# type 'help' for help\n\n>> \n=> nil\n>> "
104
+ end
105
+
106
+ it "should allow committing nothing as an xth command" do
107
+ committed = commit_test_text2
108
+ @mirror.commit committed + "\n>> "
109
+ @mirror.read.should == "# Mirah REPL\n# type 'help' for help\n\n>> $internal_repl_test = 909\n=> 909\n>> \n=> nil\n>> "
110
+ end
111
+
112
+ it "should emit changed event when text is executed" do
113
+ commit_test_text1
114
+ @changed_event.should be_true
115
+ end
116
+
117
+ it "should now have the command and the result at the end" do
118
+ commit_test_text1
119
+ @mirror.read.should == result_test_text1
120
+ end
121
+
122
+ it "should display errors" do
123
+ @mirror.commit(prompt + ">> nil.foo")
124
+ text = <<-MIRAH
125
+ # Mirah REPL
126
+ # type 'help' for help
127
+
128
+ >> nil.foo
129
+ x> NoMethodError: undefined method `foo' for nil:NilClass
130
+ (repl):1
131
+ MIRAH
132
+ @mirror.read.include?(text).should be_true
133
+ end
134
+ end
135
+ end
136
+
137
+ describe "with a history" do
138
+ before do
139
+ commit_test_text1
140
+ end
141
+
142
+ it "should not have changed" do
143
+ @mirror.changed?.should be_false
144
+ end
145
+
146
+ it "should display the history and prompt correctly" do
147
+ @mirror.read.should == result_test_text1
148
+ end
149
+
150
+ describe "when executing" do
151
+ it "should execute committed text" do
152
+ commit_test_text2
153
+ $internal_repl_test.should == 909
154
+ end
155
+
156
+ it "should show the correct history" do
157
+ commit_test_text2
158
+ @mirror.read.should == result_test_text2
159
+ end
160
+
161
+ it "should allow the history to be cleared" do
162
+ @mirror.clear_history
163
+ @mirror.read.should == ">> "
164
+ end
165
+
166
+ end
167
+ end
168
+
169
+ # somehow ...
170
+ # describe "when executing" do
171
+ # it "should persist local variables" do
172
+ # sent = prompt + ">> a = 13"
173
+ # @mirror.commit(sent)
174
+ # @mirror.commit(sent + "\n>> a")
175
+ # @mirror.read.should == (<<-MIRAH).chomp
176
+ # # Mirah REPL
177
+ # # type 'help' for help
178
+ #
179
+ # >> a = 13
180
+ # => 13
181
+ # >> a
182
+ # => 13
183
+ # >>
184
+ # MIRAH
185
+ # end
186
+ # end
187
+ end
188
+ end
@@ -0,0 +1,5 @@
1
+ $:.push File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
2
+
3
+ require 'redcar'
4
+ Redcar.environment = :test
5
+ Redcar.load_unthreaded
@@ -5,7 +5,7 @@ module Redcar
5
5
 
6
6
  attr_accessor :gc, :styledText, :document, :mate_text, :theme_name
7
7
  attr_accessor :height, :width, :highlighted
8
-
8
+
9
9
  include Redcar::Document::Controller
10
10
  include Redcar::Document::Controller::ModificationCallbacks
11
11
  include Redcar::Document::Controller::CursorCallbacks
@@ -14,14 +14,14 @@ module Redcar
14
14
  if @theme_name == EditView.theme
15
15
  return @colour if @colour
16
16
  end
17
-
17
+
18
18
  @theme_name = EditView.theme
19
19
  @theme = @mate_text.colourer.getTheme()
20
20
  @colour = @theme.globalSettings.get("pairHighlight")
21
21
  if @colour
22
22
  @colour = JavaMateView::SwtColourer.getColour(@colour)
23
23
  else
24
- @colour = ApplicationSWT.display.system_color Swt::SWT::COLOR_GRAY
24
+ @colour = ApplicationSWT.display.system_color Swt::SWT::COLOR_GRAY
25
25
  end
26
26
  @colour
27
27
  end
@@ -57,15 +57,15 @@ module Redcar
57
57
  clear
58
58
  #puts "Highligh on offset " + current.to_s() + " and its pair at " + pair.to_s()
59
59
  gc = Swt::Graphics::GC.new(@styledText)
60
- gc.setBackground(set_highlight_colour)
60
+ gc.setBackground(set_highlight_colour)
61
61
  gc.setAlpha(98)
62
62
  gc.fill_rectangle(styledText.getTextBounds(current, current))
63
- gc.fill_rectangle(styledText.getTextBounds(pair, pair))
63
+ gc.fill_rectangle(styledText.getTextBounds(pair, pair))
64
64
  @highlight.set_on(current, pair)
65
65
  gc.dispose() if gc
66
66
  end
67
67
  end
68
-
68
+
69
69
  def clear
70
70
  if @highlight.on?
71
71
  styledText.redrawRange(@highlight.current, 1, false) if @highlight.current < document.length
@@ -73,14 +73,14 @@ module Redcar
73
73
  @highlight.clear
74
74
  end
75
75
  end
76
-
76
+
77
77
  def find_pair(step, offset, search_char, current_char)
78
78
  state = 1;
79
79
  quotes = false
80
80
  doublequotes = false
81
-
81
+
82
+ offset = offset + step;
82
83
  while offset >= 0 and offset < document.length
83
- offset = offset + step;
84
84
  @newchar = styledText.getTextRange(offset, 1)
85
85
  if @newchar == search_char and !quotes and !doublequotes
86
86
  state = state - 1
@@ -94,8 +94,9 @@ module Redcar
94
94
  if state == 0
95
95
  return offset
96
96
  end
97
+ offset = offset + step;
97
98
  end
98
-
99
+
99
100
  if state != 0
100
101
  return nil
101
102
  end
@@ -121,47 +122,47 @@ module Redcar
121
122
  if @wait > 0
122
123
  return
123
124
  end
124
-
125
+
125
126
  pair = nil
126
-
127
+
127
128
  if offset >= document.length
128
129
  @char_next = nil
129
130
  else
130
- @char_next = document.get_range(offset, 1)
131
+ @char_next = document.get_range(offset, 1)
131
132
  end
132
-
133
+
133
134
  if offset > 0
134
- @char_prev = document.get_range(offset-1, 1)
135
+ @char_prev = document.get_range(offset-1, 1)
135
136
  else
136
137
  @char_prev = nil
137
138
  end
138
-
139
+
139
140
  if @char_next and @pair_chars.include?(@char_next)
140
- pair = pair_of_offset(offset)
141
+ pair = pair_of_offset(offset)
141
142
  elsif @char_prev and @pair_chars.include?(@char_prev)
142
143
  offset = offset - 1
143
144
  pair = pair_of_offset(offset)
144
145
  else
145
146
  clear
146
147
  end
147
-
148
+
148
149
  highlight_pair(offset, pair)
149
150
  end
150
151
  end
151
-
152
+
152
153
  class Highlighted
153
154
  attr_accessor :on, :current, :pair
154
-
155
+
155
156
  def initialize
156
157
  clear
157
158
  end
158
-
159
+
159
160
  def clear
160
161
  @on = false
161
162
  @current = nil
162
163
  @pair = nil
163
164
  end
164
-
165
+
165
166
  def on?
166
167
  if @on
167
168
  true
@@ -169,7 +170,7 @@ module Redcar
169
170
  false
170
171
  end
171
172
  end
172
-
173
+
173
174
  def set_on(current, pair)
174
175
  if current and pair
175
176
  @on = true