rsense-server 0.5.0

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 (137) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/Gemfile +14 -0
  4. data/Guardfile +5 -0
  5. data/LICENSE.txt +1 -0
  6. data/README.md +51 -0
  7. data/Rakefile +9 -0
  8. data/bin/_rsense.rb +115 -0
  9. data/config/puma.rb +2 -0
  10. data/lib/rsense/server/code.rb +38 -0
  11. data/lib/rsense/server/command/completion_result.rb +11 -0
  12. data/lib/rsense/server/command/special_meth.rb +18 -0
  13. data/lib/rsense/server/command/type_inference_method.rb +24 -0
  14. data/lib/rsense/server/command.rb +239 -0
  15. data/lib/rsense/server/config.rb +70 -0
  16. data/lib/rsense/server/gem_path.rb +18 -0
  17. data/lib/rsense/server/listeners/find_definition_event_listener.rb +91 -0
  18. data/lib/rsense/server/listeners/where_event_listener.rb +39 -0
  19. data/lib/rsense/server/load_path.rb +62 -0
  20. data/lib/rsense/server/options.rb +85 -0
  21. data/lib/rsense/server/parser.rb +17 -0
  22. data/lib/rsense/server/path_info.rb +17 -0
  23. data/lib/rsense/server/project.rb +24 -0
  24. data/lib/rsense/server/version.rb +5 -0
  25. data/lib/rsense/server.rb +18 -0
  26. data/rsense-server.gemspec +35 -0
  27. data/spec/fixtures/config_fixture/.rsense +4 -0
  28. data/spec/fixtures/deeply/nested/thing.rb +0 -0
  29. data/spec/fixtures/find_def_sample.json +10 -0
  30. data/spec/fixtures/sample.json +10 -0
  31. data/spec/fixtures/test_gem/.gitignore +22 -0
  32. data/spec/fixtures/test_gem/Gemfile +4 -0
  33. data/spec/fixtures/test_gem/LICENSE.txt +22 -0
  34. data/spec/fixtures/test_gem/README.md +29 -0
  35. data/spec/fixtures/test_gem/Rakefile +2 -0
  36. data/spec/fixtures/test_gem/lib/sample/version.rb +3 -0
  37. data/spec/fixtures/test_gem/lib/sample.rb +16 -0
  38. data/spec/fixtures/test_gem/sample.gemspec +23 -0
  39. data/spec/fixtures/test_gem/test.json +10 -0
  40. data/spec/rsense/server/code_spec.rb +44 -0
  41. data/spec/rsense/server/command/special_meth_spec.rb +23 -0
  42. data/spec/rsense/server/command_spec.rb +108 -0
  43. data/spec/rsense/server/config_spec.rb +27 -0
  44. data/spec/rsense/server/gem_path_spec.rb +16 -0
  45. data/spec/rsense/server/load_path_spec.rb +63 -0
  46. data/spec/rsense/server/options_spec.rb +33 -0
  47. data/spec/rsense/server/path_info_spec.rb +11 -0
  48. data/spec/rsense/server/project_spec.rb +18 -0
  49. data/spec/rsense/server_spec.rb +7 -0
  50. data/spec/spec_helper.rb +16 -0
  51. data/vendor/gems/puma-2.8.2-java/COPYING +55 -0
  52. data/vendor/gems/puma-2.8.2-java/DEPLOYMENT.md +92 -0
  53. data/vendor/gems/puma-2.8.2-java/Gemfile +17 -0
  54. data/vendor/gems/puma-2.8.2-java/History.txt +532 -0
  55. data/vendor/gems/puma-2.8.2-java/LICENSE +26 -0
  56. data/vendor/gems/puma-2.8.2-java/Manifest.txt +68 -0
  57. data/vendor/gems/puma-2.8.2-java/README.md +251 -0
  58. data/vendor/gems/puma-2.8.2-java/Rakefile +158 -0
  59. data/vendor/gems/puma-2.8.2-java/bin/puma +10 -0
  60. data/vendor/gems/puma-2.8.2-java/bin/puma-wild +17 -0
  61. data/vendor/gems/puma-2.8.2-java/bin/pumactl +12 -0
  62. data/vendor/gems/puma-2.8.2-java/docs/config.md +0 -0
  63. data/vendor/gems/puma-2.8.2-java/docs/nginx.md +80 -0
  64. data/vendor/gems/puma-2.8.2-java/docs/signals.md +42 -0
  65. data/vendor/gems/puma-2.8.2-java/ext/puma_http11/PumaHttp11Service.java +17 -0
  66. data/vendor/gems/puma-2.8.2-java/ext/puma_http11/ext_help.h +15 -0
  67. data/vendor/gems/puma-2.8.2-java/ext/puma_http11/extconf.rb +8 -0
  68. data/vendor/gems/puma-2.8.2-java/ext/puma_http11/http11_parser.c +1225 -0
  69. data/vendor/gems/puma-2.8.2-java/ext/puma_http11/http11_parser.h +64 -0
  70. data/vendor/gems/puma-2.8.2-java/ext/puma_http11/http11_parser.java.rl +161 -0
  71. data/vendor/gems/puma-2.8.2-java/ext/puma_http11/http11_parser.rl +146 -0
  72. data/vendor/gems/puma-2.8.2-java/ext/puma_http11/http11_parser_common.rl +54 -0
  73. data/vendor/gems/puma-2.8.2-java/ext/puma_http11/io_buffer.c +155 -0
  74. data/vendor/gems/puma-2.8.2-java/ext/puma_http11/mini_ssl.c +195 -0
  75. data/vendor/gems/puma-2.8.2-java/ext/puma_http11/org/jruby/puma/Http11.java +225 -0
  76. data/vendor/gems/puma-2.8.2-java/ext/puma_http11/org/jruby/puma/Http11Parser.java +488 -0
  77. data/vendor/gems/puma-2.8.2-java/ext/puma_http11/org/jruby/puma/MiniSSL.java +289 -0
  78. data/vendor/gems/puma-2.8.2-java/ext/puma_http11/puma_http11.c +491 -0
  79. data/vendor/gems/puma-2.8.2-java/lib/puma/accept_nonblock.rb +23 -0
  80. data/vendor/gems/puma-2.8.2-java/lib/puma/app/status.rb +59 -0
  81. data/vendor/gems/puma-2.8.2-java/lib/puma/binder.rb +298 -0
  82. data/vendor/gems/puma-2.8.2-java/lib/puma/capistrano.rb +86 -0
  83. data/vendor/gems/puma-2.8.2-java/lib/puma/cli.rb +587 -0
  84. data/vendor/gems/puma-2.8.2-java/lib/puma/client.rb +289 -0
  85. data/vendor/gems/puma-2.8.2-java/lib/puma/cluster.rb +389 -0
  86. data/vendor/gems/puma-2.8.2-java/lib/puma/compat.rb +18 -0
  87. data/vendor/gems/puma-2.8.2-java/lib/puma/configuration.rb +377 -0
  88. data/vendor/gems/puma-2.8.2-java/lib/puma/const.rb +165 -0
  89. data/vendor/gems/puma-2.8.2-java/lib/puma/control_cli.rb +251 -0
  90. data/vendor/gems/puma-2.8.2-java/lib/puma/daemon_ext.rb +25 -0
  91. data/vendor/gems/puma-2.8.2-java/lib/puma/delegation.rb +11 -0
  92. data/vendor/gems/puma-2.8.2-java/lib/puma/detect.rb +4 -0
  93. data/vendor/gems/puma-2.8.2-java/lib/puma/events.rb +130 -0
  94. data/vendor/gems/puma-2.8.2-java/lib/puma/io_buffer.rb +7 -0
  95. data/vendor/gems/puma-2.8.2-java/lib/puma/java_io_buffer.rb +45 -0
  96. data/vendor/gems/puma-2.8.2-java/lib/puma/jruby_restart.rb +83 -0
  97. data/vendor/gems/puma-2.8.2-java/lib/puma/minissl.rb +148 -0
  98. data/vendor/gems/puma-2.8.2-java/lib/puma/null_io.rb +34 -0
  99. data/vendor/gems/puma-2.8.2-java/lib/puma/puma_http11.jar +0 -0
  100. data/vendor/gems/puma-2.8.2-java/lib/puma/rack_default.rb +7 -0
  101. data/vendor/gems/puma-2.8.2-java/lib/puma/rack_patch.rb +45 -0
  102. data/vendor/gems/puma-2.8.2-java/lib/puma/reactor.rb +183 -0
  103. data/vendor/gems/puma-2.8.2-java/lib/puma/runner.rb +146 -0
  104. data/vendor/gems/puma-2.8.2-java/lib/puma/server.rb +801 -0
  105. data/vendor/gems/puma-2.8.2-java/lib/puma/single.rb +102 -0
  106. data/vendor/gems/puma-2.8.2-java/lib/puma/tcp_logger.rb +32 -0
  107. data/vendor/gems/puma-2.8.2-java/lib/puma/thread_pool.rb +185 -0
  108. data/vendor/gems/puma-2.8.2-java/lib/puma/util.rb +9 -0
  109. data/vendor/gems/puma-2.8.2-java/lib/puma.rb +14 -0
  110. data/vendor/gems/puma-2.8.2-java/lib/rack/handler/puma.rb +66 -0
  111. data/vendor/gems/puma-2.8.2-java/puma.gemspec +55 -0
  112. data/vendor/gems/puma-2.8.2-java/test/test_app_status.rb +92 -0
  113. data/vendor/gems/puma-2.8.2-java/test/test_cli.rb +173 -0
  114. data/vendor/gems/puma-2.8.2-java/test/test_config.rb +26 -0
  115. data/vendor/gems/puma-2.8.2-java/test/test_http10.rb +27 -0
  116. data/vendor/gems/puma-2.8.2-java/test/test_http11.rb +144 -0
  117. data/vendor/gems/puma-2.8.2-java/test/test_integration.rb +165 -0
  118. data/vendor/gems/puma-2.8.2-java/test/test_iobuffer.rb +38 -0
  119. data/vendor/gems/puma-2.8.2-java/test/test_minissl.rb +25 -0
  120. data/vendor/gems/puma-2.8.2-java/test/test_null_io.rb +31 -0
  121. data/vendor/gems/puma-2.8.2-java/test/test_persistent.rb +238 -0
  122. data/vendor/gems/puma-2.8.2-java/test/test_puma_server.rb +323 -0
  123. data/vendor/gems/puma-2.8.2-java/test/test_rack_handler.rb +10 -0
  124. data/vendor/gems/puma-2.8.2-java/test/test_rack_server.rb +141 -0
  125. data/vendor/gems/puma-2.8.2-java/test/test_tcp_rack.rb +42 -0
  126. data/vendor/gems/puma-2.8.2-java/test/test_thread_pool.rb +156 -0
  127. data/vendor/gems/puma-2.8.2-java/test/test_unix_socket.rb +39 -0
  128. data/vendor/gems/puma-2.8.2-java/test/test_ws.rb +89 -0
  129. data/vendor/gems/puma-2.8.2-java/tools/jungle/README.md +9 -0
  130. data/vendor/gems/puma-2.8.2-java/tools/jungle/init.d/README.md +54 -0
  131. data/vendor/gems/puma-2.8.2-java/tools/jungle/init.d/puma +332 -0
  132. data/vendor/gems/puma-2.8.2-java/tools/jungle/init.d/run-puma +3 -0
  133. data/vendor/gems/puma-2.8.2-java/tools/jungle/upstart/README.md +61 -0
  134. data/vendor/gems/puma-2.8.2-java/tools/jungle/upstart/puma-manager.conf +31 -0
  135. data/vendor/gems/puma-2.8.2-java/tools/jungle/upstart/puma.conf +63 -0
  136. data/vendor/gems/puma-2.8.2-java/tools/trickletest.rb +45 -0
  137. metadata +389 -0
@@ -0,0 +1,91 @@
1
+ require "set"
2
+
3
+ module Rsense
4
+ module Server
5
+ module Listeners
6
+
7
+ end
8
+ end
9
+ end
10
+
11
+ class Rsense::Server::Listeners::FindDefinitionEventListener
12
+ include Java::org.cx4a.rsense::Project::EventListener
13
+
14
+ EventType = Rsense::Typing::Graph::EventListener::EventType
15
+ SourceLocation = Rsense::Util::SourceLocation
16
+
17
+ attr_accessor :prefix, :locations, :context
18
+
19
+ def initialize(context)
20
+ @context = context
21
+ @@counter = 0
22
+ @locations = Set.new
23
+ end
24
+
25
+ def setup
26
+ @locations.clear
27
+ @prefix = Rsense::Server::Command::FIND_DEFINITION_METHOD_NAME_PREFIX + @@counter
28
+ end
29
+
30
+ def self.counter
31
+ old = @@counter
32
+ @@counter += 1
33
+ return old
34
+ end
35
+
36
+ def getLocations
37
+ @locations
38
+ end
39
+
40
+ def update(event)
41
+ vertex = event.vertex
42
+ if check_vertex(vertex)
43
+ realName = vertex.getName().substring(@prefix.length)
44
+ receivers = vertex.getReceiverVertex().getTypeSet()
45
+ receivers.each do |receiver|
46
+
47
+ receiver_type = receiver.getMetaClass()
48
+ if receiver_type
49
+ location = nil
50
+ method = receiver_type.search_method(realName)
51
+ if method
52
+ @locations.add(method.getLocation) if method.getLocation
53
+ else
54
+ klass = nil
55
+ if receiver_type instance_of? Rsense::Ruby::MetaClass
56
+ metaClass = receiver_type
57
+ if metaClass.getAttached instance_of? Rsense::Ruby::RubyModule
58
+ klass = metaClass.getAttached
59
+ end
60
+ else
61
+ klass = @context.project.graph().getRuntime().getContext().getCurrentScope().getModule()
62
+ end
63
+ if klass
64
+ constant = klass.getConstant(realName)
65
+ if constant instance_of? Rsense::Typing::Runtime::VertexHolder
66
+ location = SourceLocation.of(constant.getVertex().getNode())
67
+ elsif constant instance_of? Rsense::Ruby::RubyModule
68
+ location = constant.getLocation()
69
+ end
70
+ end
71
+ end
72
+
73
+ if location
74
+ @locations.add(location)
75
+ end
76
+
77
+ end
78
+ end
79
+ vertex.cutout()
80
+ end
81
+ end
82
+
83
+ def check_vertex(vertex)
84
+ if @context.main && event.type == EventType::METHOD_MISSING
85
+ if vertex && vertex.getName().startsWith(@prefix) && vertex.getReceiverVertex()
86
+ return true
87
+ end
88
+ end
89
+ end
90
+
91
+ end
@@ -0,0 +1,39 @@
1
+ module Rsense
2
+ module Server
3
+ module Listeners
4
+
5
+ end
6
+ end
7
+ end
8
+
9
+ class Rsense::Server::Listeners::WhereEventListener
10
+ include Java::org.cx4a.rsense::Project::EventListener
11
+
12
+ EventType = Rsense::Typing::Graph::EventListener::EventType
13
+ SourceLocation = Rsense::Util::SourceLocation
14
+
15
+ attr_accessor :line, :closest, :name, :context
16
+
17
+ def initialize(context)
18
+ @context = context
19
+ end
20
+
21
+ def prepare(line)
22
+ @line = line
23
+ end
24
+
25
+ def update(event)
26
+ eligible = [ EventType::DEFINE, EventType::CLASS, EventType::MODULE ]
27
+ if context.main && eligible.any? {|e| event.type == e}
28
+ if event.name && event.node
29
+ loc = SourceLocation.of(event.node)
30
+ loc_line = loc.getLine()
31
+ if loc && @line >= loc_line && @line - @closest > @line - loc_line
32
+ @closest = loc_line
33
+ @name = event.name
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ end
@@ -0,0 +1,62 @@
1
+ require "pathname"
2
+
3
+ module Rsense
4
+ module Server
5
+ module LoadPath
6
+
7
+ Dependency = Struct.new(:name, :full_name, :path)
8
+
9
+ module_function
10
+ def paths
11
+ fetch.map { |p| p unless p.to_s =~ /^file:/ }
12
+ end
13
+
14
+ def fetch
15
+ $LOAD_PATH
16
+ end
17
+
18
+ def dependencies(project)
19
+ @gemfile = find_gemfile(project)
20
+ if @gemfile
21
+ lockfile = Bundler::LockfileParser.new(Bundler.read_file(@gemfile))
22
+ gem_info(lockfile)
23
+ end
24
+ end
25
+
26
+ def gem_info(lfile)
27
+ lfile.specs.map do |s|
28
+ generate_struct(s.name, s.version)
29
+ end
30
+ end
31
+
32
+ def generate_struct(name, version)
33
+ paths = check_version(find_paths(name), version)
34
+ Dependency.new(name, "#{name}-#{version.to_s}", paths)
35
+ end
36
+
37
+ def check_version(gem_paths, version)
38
+ gem_paths.select do |p|
39
+ p.to_s =~ /#{version}/
40
+ end
41
+ end
42
+
43
+ def find_paths(name)
44
+ paths = Gem.find_files(name)
45
+ return paths unless paths.empty? && name.length > 1
46
+ find_paths(name.chop)
47
+ end
48
+
49
+ def find_gemfile(project)
50
+ pth = Pathname.new(project).expand_path
51
+ lockfile = Dir.glob(pth.join("**/Gemfile.lock")).first
52
+ unless lockfile
53
+ unless pth.parent == pth
54
+ lockfile = find_gemfile(pth.parent)
55
+ end
56
+ end
57
+ lockfile
58
+ end
59
+
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,85 @@
1
+ require "pathname"
2
+ require "set"
3
+ require "json"
4
+
5
+ module Rsense
6
+ module Server
7
+ class Options
8
+ attr_accessor :rest, :command, :location, :log, :log_level, :debug, :project_path, :name, :prefix, :config, :code, :file
9
+
10
+ def initialize(opts)
11
+ @rest = {}
12
+ @command = opts["command"] if opts["command"]
13
+ parse_args(opts)
14
+ end
15
+
16
+ def parse_args(opts)
17
+ opts.each_pair do |k, v|
18
+ if respond_to?("#{k}=")
19
+ __send__("#{k}=", v)
20
+ else
21
+ @rest[k] = v
22
+ end
23
+ end
24
+ end
25
+
26
+ def project=(path)
27
+ @project_path = Pathname.new(path).expand_path
28
+ end
29
+
30
+ def file=(path)
31
+ @file = Pathname.new(path).expand_path
32
+ end
33
+
34
+ def here_doc_reader(reader)
35
+ Rsense::Util::HereDocReader.new(reader, "EOF")
36
+ end
37
+
38
+ def debug?
39
+ @debug
40
+ end
41
+
42
+ def log_level
43
+ if debug?
44
+ Rsense::Util::Logger::Level::DEBUG
45
+ end
46
+ level = @log_level
47
+ if level
48
+ Rsense::Util::Logger::Level.valueOf(level.upcase)
49
+ else
50
+ Rsense::Util::Logger::Level::MESSAGE
51
+ end
52
+ end
53
+
54
+ def progress
55
+ if @progress
56
+ @progress.to_i
57
+ else
58
+ 0
59
+ end
60
+ end
61
+
62
+ def inherit(parent)
63
+ if parent.debug?
64
+ @debug = true
65
+ end
66
+ @log = parent.log()
67
+ @log_level = parent.log_level
68
+ @load_path = parent.load_path
69
+ @gem_path = parent.gem_path
70
+ end
71
+
72
+ def load_config(config)
73
+ path = Pathname.new(config).expand_path
74
+ if path.exist?
75
+ json = JSON.parse(path.read)
76
+ parse_args(json)
77
+ else
78
+ puts "Config file: #{path} does not exist"
79
+ end
80
+ end
81
+
82
+ end
83
+ end
84
+ end
85
+
@@ -0,0 +1,17 @@
1
+ require "jruby-parser"
2
+
3
+ module Rsense
4
+ module Server
5
+ class Parser
6
+ include JRubyParser
7
+
8
+ def parse_string(source_string, filename='')
9
+ filename = filename || '(string)'
10
+ version = org.jrubyparser.CompatVersion::RUBY2_0
11
+ opts = { filename: filename, version: version }
12
+ parse(source_string, opts)
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require "filetree"
2
+
3
+ require_relative './version'
4
+
5
+ module Rsense
6
+ module Server
7
+ module PathInfo
8
+
9
+ RSENSE_SERVER_HOME = FileTree.new(File.dirname(__FILE__)).expand_path.ancestors[2]
10
+
11
+ def self.bin_path
12
+ RSENSE_SERVER_HOME.join("bin/_rsense.rb")
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,24 @@
1
+ module Rsense
2
+ module Server
3
+ class Project
4
+ attr_accessor :name, :path, :graph, :runtime, :load_path, :gem_path, :loaded, :dependencies, :stubs
5
+
6
+ def initialize(name, path)
7
+ @name = name
8
+ @path = path
9
+ @graph = Rsense::Typing::Graph.new
10
+ @runtime = @graph.getRuntime()
11
+ @stubs = Dir.glob(Rsense::BUILTIN.join("**/*.rb"))
12
+ @load_path = Rsense::Server::LoadPath.paths
13
+ @gem_path = Rsense::Server::GemPath.paths
14
+ @loaded = []
15
+ @dependencies = Rsense::Server::LoadPath.dependencies(@path)
16
+ end
17
+
18
+ def loaded?(feature)
19
+ @loaded.include?(feature)
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,5 @@
1
+ module Rsense
2
+ module Server
3
+ VERSION = "0.5.0"
4
+ end
5
+ end
@@ -0,0 +1,18 @@
1
+ require "pathname"
2
+ require "jruby-parser"
3
+ require "rsense-core"
4
+ require "rsense/server/version"
5
+
6
+ require_relative "server/project"
7
+ require_relative "server/parser"
8
+ require_relative "server/command"
9
+ require_relative "server/options"
10
+ require_relative "server/gem_path"
11
+ require_relative "server/load_path"
12
+ require_relative "server/code"
13
+
14
+ module Rsense
15
+ module Server
16
+
17
+ end
18
+ end
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rsense/server/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rsense-server"
8
+ spec.version = Rsense::Server::VERSION
9
+ spec.authors = ["Eric West", "Tomohiro Matsuyama"]
10
+ spec.email = ["esw9999@gmail.com", "tomo@cx4a.org"]
11
+ spec.summary = %q{RSense knows your code.}
12
+ spec.description = %q{rsense-server is the communications bridge between the user (or editor plugins the user is using) and the rsense library written in java.}
13
+ spec.homepage = ""
14
+ spec.license = "GPL"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib", "vendor/gems/puma-2.8.2-java/lib/"]
20
+
21
+ spec.add_dependency "rsense-core", "~> 0.5.1"
22
+ spec.add_dependency "spoon", "~> 0.0.4"
23
+ spec.add_dependency "jruby-jars", "~> 1.7.4"
24
+ spec.add_dependency "jruby-parser", "~> 0.5.4"
25
+ spec.add_dependency "filetree", "~> 1.0.0"
26
+ spec.add_dependency "bundler", "~> 1.6"
27
+ spec.add_dependency "sinatra"
28
+
29
+ spec.add_development_dependency 'guard'
30
+ spec.add_development_dependency 'guard-minitest'
31
+ spec.add_development_dependency 'minitest-reporters'
32
+ spec.add_development_dependency 'minitest'
33
+ spec.add_development_dependency 'pry'
34
+ spec.add_development_dependency "rake"
35
+ end
@@ -0,0 +1,4 @@
1
+ {
2
+ "port": 123456,
3
+ "ignores": [".foo", ".bar"]
4
+ }
File without changes
@@ -0,0 +1,10 @@
1
+ {
2
+ "command": "find_definition",
3
+ "project": "~/code/rsense/rsense",
4
+ "file": "~/code/rsense/rsense/lib/rsense.rb",
5
+ "code": "module TestStuff\n class TestThings\n def junk\n 'junk'\n end\n end\nend\n\nTestStuff::TestThings",
6
+ "location": {
7
+ "row": 9,
8
+ "column": 22
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "command": "code_completion",
3
+ "project": "~/code/rsense/rsense",
4
+ "file": "~/code/rsense/rsense/lib/rsense.rb",
5
+ "code": "def check(testarg)\n testarg\nend\ncheck('hello')",
6
+ "location": {
7
+ "row": 2,
8
+ "column": 10
9
+ }
10
+ }
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in sample.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Eric West
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,29 @@
1
+ # Sample
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'sample'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install sample
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it ( https://github.com/[my-github-username]/sample/fork )
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create a new Pull Request
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,3 @@
1
+ module Sample
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,16 @@
1
+ require "sample/version"
2
+
3
+ class Sample
4
+ attr_accessor :simple
5
+
6
+ def initialize
7
+ @simple = "simple"
8
+ end
9
+
10
+ def another
11
+ "another"
12
+ end
13
+ end
14
+
15
+ sample = Sample.new
16
+ sample
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'sample/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "sample"
8
+ spec.version = Sample::VERSION
9
+ spec.authors = ["Eric West"]
10
+ spec.email = ["eric.west@lonelyplanet.com"]
11
+ spec.summary = %q{TODO: Write a short summary. Required.}
12
+ spec.description = %q{TODO: Write a longer description. Optional.}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake"
23
+ end
@@ -0,0 +1,10 @@
1
+ {
2
+ "command": "code_completion",
3
+ "project": "spec/fixtures/test_gem",
4
+ "file": "spec/fixtures/test_gem/lib/sample.rb",
5
+ "code": "require \"sample/version\"\n\nmodule Sample\n attr_accessor :simple\n\n def initialize\n @simple = \"simple\"\n end\n\n def another\n \"another\"\n end\nend\n\nsample = Sample.new\nsample\n",
6
+ "location": {
7
+ "row": 16,
8
+ "column": 7
9
+ }
10
+ }
@@ -0,0 +1,44 @@
1
+ require "pathname"
2
+ require "json"
3
+ require_relative "../../spec_helper"
4
+
5
+ describe Rsense::Server::Code do
6
+ describe "type inference" do
7
+
8
+ before do
9
+ @json_path = Pathname.new("spec/fixtures/sample.json")
10
+ @json = JSON.parse(@json_path.read)
11
+ @code = Rsense::Server::Code.new(@json["code"])
12
+ @location = @json["location"]
13
+ end
14
+
15
+ it "has an array of lines" do
16
+ @code.lines.size.must_equal(4)
17
+ @code.lines.last.must_match(/hello/)
18
+ end
19
+
20
+ it "injects the type inference marker" do
21
+ @code.inject_inference_marker(@location).must_match(/testarg\.__rsense_type_inference__/)
22
+ end
23
+
24
+ it "does not duplicate the dot accessor" do
25
+ code = Rsense::Server::Code.new("def check(testar)\n testar.\nend\ncheck('hello')")
26
+ code.inject_inference_marker(@location).wont_match(/testar\.\.__rsense_type_inference__/)
27
+ code.inject_inference_marker(@location).must_match(/testar\.__rsense_type_inference__/)
28
+ end
29
+ end
30
+
31
+ describe "find definition" do
32
+ before do
33
+ @json_path = Pathname.new("spec/fixtures/find_def_sample.json")
34
+ @json = JSON.parse(@json_path.read)
35
+ @code = Rsense::Server::Code.new(@json["code"])
36
+ @location = @json["location"]
37
+ end
38
+
39
+ it "injects the find definition marker" do
40
+ marker = "#{Rsense::Server::Code::FIND_DEFINITION_METHOD_NAME_PREFIX}0"
41
+ @code.inject_definition_marker(marker, @location).must_match(/__rsense_find_definition__0TestThings/)
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,23 @@
1
+ require_relative "../../../spec_helper"
2
+
3
+ describe Rsense::Server::Command::SpecialMeth do
4
+ before do
5
+ @spec_meth = Rsense::Server::Command::SpecialMeth.new() do |runtime, receivers, args, blcck, result|
6
+ { runtime: runtime,
7
+ receivers: receivers,
8
+ args: args,
9
+ blcck: blcck,
10
+ result: result
11
+ }
12
+ end
13
+ end
14
+
15
+ it "calls block with args" do
16
+ meth_hash = @spec_meth.call("run", "rec", "args", "blcck", "result")
17
+ meth_hash[:runtime].must_match(/run/)
18
+ meth_hash[:receivers].must_match(/rec/)
19
+ meth_hash[:args].must_match(/args/)
20
+ meth_hash[:blcck].must_match(/blcck/)
21
+ meth_hash[:result].must_match(/result/)
22
+ end
23
+ end