rsense-server 0.5.10 → 0.5.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 904b8cb503bf9dd407287fe436c26c1ec36ad522
4
- data.tar.gz: f49cef158d22c3e34e836a9901b1d7b3242d7804
3
+ metadata.gz: a93ed224e1c6d3c0e2801f7ddeac43131e643575
4
+ data.tar.gz: 6dfc2697283bb4ebdb58526798cecc0485fb772f
5
5
  SHA512:
6
- metadata.gz: 36abbff6e807c73dd598e6f7b54e5fbb26cb7fdd216e578394d40f4eb0cd83197d461da352a611a3ac8061e532719639da23381af6f93a92b2edf8e67d919777
7
- data.tar.gz: c1c76e00e84238d6729082f44eb0ba0ab0696f8739fdf1985df9554031d733a311e567793bfe9ae18538cbda14d1527af8b58a97d6d64aa4aac2139dc5efc3a0
6
+ metadata.gz: 7ee3a53cc591ae8fdedd0cfdc7777ed40b4dfe084015f09243bba47bda9de55d8db893cb77c69ae8d496630ab039d41f6e029eefe5f6013f870e89902e932f5b
7
+ data.tar.gz: 5b54aaf75b9dfde8c8f87f41a9f88a951aedbb7c575c219dd92a714b83b6d43f67a4a3d51c1d587b014d722780f4d7cbacf8b71a56165d1e271b79df3c1683f3
data/bin/_rsense.rb CHANGED
@@ -19,6 +19,10 @@ OptionParser.new do |opts|
19
19
  opts.on("-p", "--port PORT", "Port") do |port|
20
20
  options[:port] = port
21
21
  end
22
+
23
+ opts.on("-d", "--debug", "Debug") do |debug|
24
+ options[:debug] = true
25
+ end
22
26
  end.parse!
23
27
 
24
28
  def config(options)
@@ -49,11 +53,20 @@ end
49
53
  PORT = port(options)
50
54
 
51
55
  class ProjectManager
52
- attr_accessor :roptions, :rcommand, :rproject
56
+ attr_accessor :roptions, :rcommand, :rproject, :debug
57
+
58
+ def debug?
59
+ @debug
60
+ end
53
61
  end
54
62
 
55
63
  def projman_set_up(projman, options)
56
64
  options[:path] ||= "."
65
+ if options[:debug]
66
+ projman.debug = true
67
+ else
68
+ projman.debug = false
69
+ end
57
70
  path = Pathname.new(options[:path]).expand_path
58
71
  Rsense::Server::Command::Preload.load(projman, path)
59
72
  end
@@ -72,7 +85,7 @@ class RsenseApp < Sinatra::Base
72
85
  set :port, PORT
73
86
 
74
87
  def setup(jsondata)
75
- if PROJMAN.roptions && PROJMAN.roptions.project_path.to_s =~ /#{jsondata["project"]}/ && PROJMAN.rcommand && PROJMAN.roptions.file.to_s =~ /#{jsondata["file"]}/
88
+ if project_check?(jsondata)
76
89
  PROJMAN.roptions = Rsense::Server::Options.new(jsondata)
77
90
  PROJMAN.rcommand.options = PROJMAN.roptions
78
91
  else
@@ -81,13 +94,21 @@ class RsenseApp < Sinatra::Base
81
94
  end
82
95
  end
83
96
 
97
+ def project_check?(jsondata)
98
+ PROJMAN.roptions && PROJMAN.roptions.project_path.to_s =~ /#{jsondata["project"]}/ && PROJMAN.rcommand && PROJMAN.roptions.file && PROJMAN.roptions.file.to_s =~ /#{jsondata["file"]}/
99
+ end
100
+
84
101
  def code_completion
85
102
  if PROJMAN.roptions.code
86
103
  candidates = PROJMAN.rcommand.code_completion(PROJMAN.roptions.file, PROJMAN.roptions.location, PROJMAN.roptions.code)
87
104
  else
88
105
  candidates = PROJMAN.rcommand.code_completion(PROJMAN.roptions.file, PROJMAN.roptions.location)
89
106
  end
90
- PROJMAN.rcommand.errors.each { |e| puts e }
107
+
108
+ if PROJMAN.debug?
109
+ PROJMAN.rcommand.errors.each { |e| puts e }
110
+ end
111
+
91
112
  completions = candidates.map do |c|
92
113
  {
93
114
  name: c.completion,
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+ require 'json'
5
+ require 'net/http'
6
+
7
+ module Rsense
8
+ class Request
9
+ SOCKET_PATH = 'http://localhost'
10
+ DEFAULT_PORT = 47367
11
+
12
+ def self.req(jsondata)
13
+ request = Net::HTTP::Post.new uri
14
+ request.body = jsondata
15
+
16
+ Net::HTTP.start(uri.host, uri.port) do |http|
17
+ http.request request
18
+ end
19
+ end
20
+
21
+ def self.uri
22
+ uri = URI(SOCKET_PATH)
23
+ uri.port = DEFAULT_PORT
24
+ uri
25
+ end
26
+ end
27
+
28
+ class Main
29
+ def self.run(jsondata)
30
+ req_body = request(jsondata).body
31
+ completions_hash = JSON.parse(req_body)
32
+ self.stringify(completions_hash)
33
+ end
34
+
35
+ def self.stringify(completions_hash)
36
+ compls = completions_hash["completions"].map do |c|
37
+ "#{c["name"]} #{c["qualified_name"]} #{c["base_name"]} #{c["kind"]}"
38
+ end
39
+ compls.join("\n")
40
+ end
41
+
42
+ def self.request(jsondata)
43
+ Rsense::Request.req(jsondata)
44
+ end
45
+ end
46
+ end
47
+
48
+ options = { command: "code_completion" }
49
+ OptionParser.new do |opts|
50
+ opts.banner = "Usage: rsense start [options]"
51
+
52
+ opts.on("--project PROJECT", "project path") do |project|
53
+ options[:project] = project
54
+ end
55
+
56
+ opts.on("--filepath FILEPATH", "Filepath") do |filepath|
57
+ options[:file] = filepath
58
+ end
59
+
60
+ opts.on("--text TEXT", "Text") do |text|
61
+ options[:code] = text
62
+ end
63
+
64
+ opts.on("--location LOCATION", "Location") do |location|
65
+ loc = location.split(':')
66
+ row = loc.first
67
+ col = loc.last
68
+ options[:location] = { row: (row.to_i + 1), column: (col.to_i + 1) }
69
+ end
70
+ end.parse!
71
+
72
+ begin
73
+
74
+ jsondata = JSON.generate(options)
75
+
76
+ compls = Rsense::Main.run(jsondata)
77
+ puts compls
78
+
79
+ rescue Exception => e
80
+ puts "ERROR: #{e}"
81
+ end
@@ -0,0 +1,89 @@
1
+ require "pry"
2
+ require_relative "./runtime_helper"
3
+
4
+ module Rsense
5
+ module Server
6
+ module Command
7
+
8
+ end
9
+ end
10
+ end
11
+
12
+ class Rsense::Server::Command::Vertex < Java::org.cx4a.rsense.typing.vertex::Vertex
13
+
14
+ def addType(type)
15
+ unless type
16
+ return false
17
+ end
18
+ super
19
+ end
20
+ end
21
+
22
+ class Rsense::Server::Command::Graph < Java::org.cx4a.rsense.typing::Graph
23
+ RuntimeHelper = Rsense::Server::Command::RuntimeHelper
24
+ attr_accessor :context
25
+
26
+ def initialize
27
+ super
28
+ @context = self.runtime.getContext
29
+ end
30
+
31
+ def visitDefnNode(node)
32
+ name = node.getName()
33
+ if name.match(/new/)
34
+ return Java::org.cx4a.rsense.typing.vertex::Vertex::EMPTY
35
+ end
36
+ super
37
+ end
38
+
39
+ def visitDefsNode(node)
40
+ name = node.getName()
41
+ if name.match(/new/)
42
+ return Java::org.cx4a.rsense.typing.vertex::Vertex::EMPTY
43
+ end
44
+ super
45
+ end
46
+
47
+ def visitColon2Node(node)
48
+ target = RuntimeHelper.getNamespace(self, node)
49
+ super
50
+ end
51
+
52
+ def visitClassNode(node)
53
+ cpath = node.getCPath()
54
+ name = cpath.getName()
55
+ RuntimeHelper.getNamespace(self, cpath)
56
+ super
57
+ end
58
+
59
+ def visitFCallNode(node)
60
+ if node.name.match(/filter!/)
61
+ if node.getArgs && node.getArgs.getNodeType == Java::org.jrubyparser.ast::NodeType::BLOCKPASSNODE
62
+ block_pass = node.getArgs()
63
+ argVertices = RuntimeHelper.setupCallArgs(self, block_pass.getArgs())
64
+ block = RuntimeHelper.setupCallBlock(self, block_pass)
65
+ else
66
+ argVertices = RuntimeHelper.setupCallArgs(self, node.getArgs())
67
+ block = RuntimeHelper.setupCallBlock(self, node.getIter())
68
+ end
69
+ vertex = Java::org.cx4a.rsense.typing.vertex::CallVertex.new(node, createFreeSingleTypeVertex(context.getFrameSelf()), argVertices, block)
70
+ vertex.setPrivateVisibility(true)
71
+ return RuntimeHelper.call(self, vertex)
72
+ end
73
+ super
74
+ end
75
+
76
+ def createFreeSingleTypeVertex(type)
77
+ vertex = createFreeVertex()
78
+ vertex.addType(type)
79
+ return vertex
80
+ end
81
+
82
+ def createFreeVertex(typeSet=nil)
83
+ if typeSet
84
+ return Rsense::Server::Command::Vertex.new(nil, typeSet)
85
+ else
86
+ return Rsense::Server::Command::Vertex.new
87
+ end
88
+ end
89
+ end
@@ -1,26 +1,51 @@
1
1
  module Rsense
2
2
  module Server
3
3
  module Command
4
- module Preload
5
-
6
- def stub_data(path)
7
- filepath = path.join("/lib/code.rb")
8
- {
9
- "command"=>"code_completion",
10
- "project" => path.to_s,
11
- "file" => filepath.to_s,
12
- "code" => "def check(testarg)\n testarg\nend\ncheck('hello')",
13
- "location" => { "row" => 2, "column" => 10 }
14
- }
4
+ class Preload
5
+ SourceCode = Struct.new(:name, :full_name, :path, :files, :source)
6
+
7
+ def self.stub_data(path)
8
+ { "project" => path.to_s }
15
9
  end
16
- module_function :stub_data
17
10
 
18
- def load(project_manager, path)
11
+ def self.load(project_manager, path)
19
12
  PROJMAN.roptions = Rsense::Server::Options.new(stub_data(path))
20
13
  PROJMAN.rcommand = Rsense::Server::Command::Command.new(PROJMAN.roptions)
21
14
  end
22
15
 
23
- module_function :load
16
+ def self.dependency_code(dependencies)
17
+ paths = dependencies.map { |d| gen_source(d) }.compact!
18
+ lib_dirs(paths)
19
+ code(paths)
20
+ paths.each { |l| concat_files(l) }
21
+ end
22
+
23
+ def self.gen_source(d)
24
+ SourceCode.new(d.name, d.full_name, d.path.first) if d.path.first
25
+ end
26
+
27
+ def self.code(libs)
28
+ libs.each do |l|
29
+ l.files = Dir.glob(Pathname.new(l.path).join("**/*.rb"))
30
+ end
31
+ end
32
+
33
+ def self.concat_files(paths)
34
+ code = paths.files.map { |f| Pathname.new(f).read }
35
+ paths.source = code.join("\n")
36
+ end
37
+
38
+ def self.lib_dirs(paths)
39
+ paths.each { |p|
40
+ p.path = find_lib(p)
41
+ }
42
+ end
43
+
44
+ def self.find_lib(path)
45
+ p = Pathname.new(path.path).expand_path
46
+ return p.dirname if p.file?
47
+ return p
48
+ end
24
49
 
25
50
  end
26
51
  end
@@ -0,0 +1,30 @@
1
+ java_import Java::org.cx4a.rsense.typing.vertex::MultipleAsgnVertex
2
+
3
+ module Rsense
4
+ module Server
5
+ module Command
6
+
7
+ end
8
+ end
9
+ end
10
+
11
+ class Rsense::Server::Command::RuntimeHelper < Java::org.cx4a.rsense.typing.runtime::RuntimeHelper
12
+
13
+ def self.getNamespace(graph, node)
14
+ if node.class.to_s.match(/Colon2ConstNode/)
15
+ left = graph.createVertex((node).getLeftNode())
16
+ object = left.singleType()
17
+ if object && object.java_object.java_kind_of?(Java::org.cx4a.rsense.ruby::RubyModule)
18
+ return object
19
+ else
20
+ return nil
21
+ end
22
+ else
23
+ super
24
+ end
25
+ end
26
+
27
+ def self.get_namespace(graph, node)
28
+ self.getNamespace(graph, node)
29
+ end
30
+ end
@@ -7,6 +7,7 @@ require_relative "./command/type_inference_method"
7
7
  require_relative "./command/native_attr_method"
8
8
  require_relative "./command/alias_native_method"
9
9
  require_relative "./command/rsense_method"
10
+ require_relative "./command/preload"
10
11
 
11
12
  module Rsense
12
13
  module Server
@@ -95,7 +96,7 @@ class Rsense::Server::Command::Command
95
96
  return LoadResult.alreadyLoaded() if project.loaded?(file)
96
97
  return LoadResult.alreadyLoaded() if project.loaded?(feature)
97
98
  return if file.extname =~ /(\.so|\.dylib|\.dll|\.java|\.class|\.jar|\.c$|\.h$|\.m$|\.js|\.html|\.css)/
98
- project.loaded << feature
99
+
99
100
  project.loaded << file
100
101
 
101
102
  oldmain = @context.main
@@ -105,6 +106,7 @@ class Rsense::Server::Command::Command
105
106
  else
106
107
  @context.main = false
107
108
  end
109
+ return if file.directory?
108
110
 
109
111
  source = file.read
110
112
  return unless check_shebang(source)
@@ -112,11 +114,24 @@ class Rsense::Server::Command::Command
112
114
  begin
113
115
  @ast = @parser.parse_string(source, file.to_s)
114
116
  project.graph.load(@ast)
115
- result = LoadResult.new
116
- result.setAST(@ast)
117
- result
117
+
118
118
  rescue Java::OrgJrubyparserLexer::SyntaxException => e
119
119
  @errors << e
120
+ rescue Java::JavaUtil::ConcurrentModificationException => e
121
+ @errors << e
122
+ end
123
+ end
124
+
125
+ def load_gem(project, source)
126
+ begin
127
+ @ast = @parser.parse_string(source.source, source.name)
128
+ project.graph.load(@ast)
129
+ rescue Java::OrgJrubyparserLexer::SyntaxException => e
130
+ @errors << e
131
+ rescue Java::JavaLang::NullPointerException => e
132
+ @errors << e
133
+ rescue Java::JavaUtil::ConcurrentModificationException => e
134
+ @errors << e
120
135
  end
121
136
  end
122
137
 
@@ -232,8 +247,8 @@ class Rsense::Server::Command::Command
232
247
  source = code.inject_inference_marker(location)
233
248
  @ast = @parser.parse_string(source, file.to_s)
234
249
  @project.graph.load(@ast)
235
- result = Java::org.cx4a.rsense::CodeCompletionResult.new
236
- result.setAST(@ast)
250
+ # result = Java::org.cx4a.rsense::CodeCompletionResult.new
251
+ # result.setAST(@ast)
237
252
  rescue Java::OrgJrubyparserLexer::SyntaxException => e
238
253
  @errors << e
239
254
  end
@@ -304,14 +319,26 @@ class Rsense::Server::Command::Command
304
319
  prepare_project()
305
320
  end
306
321
 
322
+ def set_features_loaded(deps)
323
+ deps.each do |d|
324
+ @project.loaded << d.name
325
+ end
326
+ end
327
+
307
328
  def prepare_project()
308
329
  if @options.name
309
- name = @roptions.name
330
+ name = @options.name
310
331
  else
311
332
  name = "(sandbox)"
312
333
  end
313
334
  file = @options.project_path
314
335
  @project = Rsense::Server::Project.new(name, file)
336
+ prepare(project)
337
+ set_features_loaded(@project.dependencies)
338
+ codes = Rsense::Server::Command::Preload.dependency_code(@project.dependencies)
339
+ codes.each do |c|
340
+ load_gem(@project, c)
341
+ end
315
342
  end
316
343
 
317
344
  end
@@ -71,6 +71,4 @@ class Rsense::Server::Config
71
71
  options(conf)
72
72
  end
73
73
  end
74
-
75
-
76
74
  end
@@ -22,9 +22,10 @@ module Rsense
22
22
  start_dir = Dir.pwd
23
23
  Dir.chdir(@gemfile.dirname)
24
24
  lockfile = Bundler::LockfileParser.new(Bundler.read_file(@gemfile))
25
- gem_info(lockfile)
25
+ @deps = gem_info(lockfile)
26
26
  Dir.chdir(start_dir)
27
27
  end
28
+ @deps
28
29
  end
29
30
 
30
31
  def gem_info(lfile)
@@ -1,3 +1,7 @@
1
+ require_relative "./command/graph"
2
+ require_relative "./command/runtime_helper"
3
+ require "rsense-core"
4
+
1
5
  module Rsense
2
6
  module Server
3
7
  class Project
@@ -6,7 +10,8 @@ module Rsense
6
10
  def initialize(name, path)
7
11
  @name = name
8
12
  @path = path
9
- @graph = Rsense::Typing::Graph.new
13
+ #@graph = Java::org.cx4a.rsense.typing::Graph.new
14
+ @graph = Rsense::Server::Command::Graph.new
10
15
  @runtime = @graph.getRuntime()
11
16
  @stubs = Dir.glob(Rsense::BUILTIN.join("**/*.rb"))
12
17
  @load_path = Rsense::Server::LoadPath.paths
@@ -1,5 +1,5 @@
1
1
  module Rsense
2
2
  module Server
3
- VERSION = "0.5.10"
3
+ VERSION = "0.5.11"
4
4
  end
5
5
  end
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib", "vendor/gems/puma-2.8.2-java/lib/"]
20
20
 
21
- spec.add_dependency "rsense-core", "~> 0.6.2"
21
+ spec.add_dependency "rsense-core", "~> 0.6.6"
22
22
  spec.add_dependency "spoon", "~> 0.0.4"
23
23
  spec.add_dependency "jruby-jars", "~> 1.7.4"
24
24
  spec.add_dependency "jruby-parser", "~> 0.5.4"
@@ -22,7 +22,7 @@ describe "completions" do
22
22
  it "returns completions" do
23
23
  @script = TestMockscript.new
24
24
  compls = @script.code_complete
25
- compls.size.must_equal(58)
25
+ compls.size.must_equal(66)
26
26
  end
27
27
 
28
28
  end
@@ -3,15 +3,13 @@ require "json"
3
3
  require_relative "../../spec_helper.rb"
4
4
 
5
5
  describe Rsense::Server::Command::Command do
6
-
7
- before do
8
- @json_path = Pathname.new("spec/fixtures/sample.json")
9
- @json = JSON.parse(@json_path.read)
10
- @options = Rsense::Server::Options.new(@json)
11
- end
6
+ json_path = Pathname.new("spec/fixtures/sample.json")
7
+ json = JSON.parse(json_path.read)
8
+ OPTIONS = Rsense::Server::Options.new(json)
9
+ COMMAND = Rsense::Server::Command::Command.new(OPTIONS)
12
10
 
13
11
  it "can be initialized" do
14
- Rsense::Server::Command::Command.new(@options)
12
+ Rsense::Server::Command::Command.new(OPTIONS)
15
13
  end
16
14
 
17
15
  describe "finding dependencies" do
@@ -32,47 +30,46 @@ describe Rsense::Server::Command::Command do
32
30
  "/i/smell/the/blood/of/an/englishman"
33
31
  ]
34
32
  @stubs = Dir.glob(Rsense::BUILTIN.join("**/*.rb"))
35
- @project = Project.new(@loadpath, @gempath, @stubs)
36
- @command = Rsense::Server::Command::Command.new(@options)
33
+ @project = Project.new("(test-sandbox)", "spec/fixtures/test_gem/", @stubs)
37
34
  end
38
35
 
39
36
  it "finds the dependency" do
40
- matches = @command.dependency_matches(@dependencies, "foo")
37
+ matches = COMMAND.dependency_matches(@dependencies, "foo")
41
38
  matches.first.to_s.must_match(/baz/)
42
39
  end
43
40
 
44
41
  it "does not find a dependency which is not there" do
45
- @command.dependency_matches(@dependencies, "scoby").must_be_empty
42
+ COMMAND.dependency_matches(@dependencies, "scoby").must_be_empty
46
43
  end
47
44
 
48
45
  it "finds the path in the load_path" do
49
- @command.load_path_matches(@project, "def_sample").size.must_equal(1)
46
+ @project.load_path = @loadpath
47
+ COMMAND.load_path_matches(@project, "def_sample").size.must_equal(1)
50
48
  end
51
49
 
52
50
  it "gathers the lib directory paths from the dependencies" do
53
51
  deps = [
54
52
  Dependency.new("foo", "foo.1.2", ["/foo/lib/foo.rb"]),
55
- Dependency.new("scooby", "scooby.1.2", ["/scooby/lib/scooby.rb"])
56
53
  ]
57
- paths = @command.dependency_paths(deps)
58
- paths.size.must_equal(2)
59
- paths.first.to_s.must_match(/\/foo\/lib$/)
54
+ paths = COMMAND.dependency_paths(deps)
55
+
56
+ paths.to_s.must_match(/\/foo\/lib/)
60
57
  end
61
58
 
62
59
  it "finds a deeply nested path" do
63
60
  dep_paths = [Pathname.new("spec/fixtures/deeply"), Pathname.new("foo/bar/baz")]
64
- matches = @command.deep_check(@gempath, dep_paths, "thing")
61
+ matches = COMMAND.deep_check(@gempath, dep_paths, "thing")
65
62
  matches.first.must_match(/nested/)
66
63
  matches.size.must_equal(1)
67
64
  end
68
65
 
69
66
  it "finds the stubs" do
70
- matches = @command.stub_matches(@project, "_builtin")
67
+ matches = COMMAND.stub_matches(@project, "_builtin")
71
68
  matches.size.must_equal(1)
72
69
  end
73
70
 
74
71
  it "finds the _builtin" do
75
- @command.builtin_path(@project).to_s.must_match(/_builtin/)
72
+ COMMAND.builtin_path(@project).to_s.must_match(/_builtin/)
76
73
  end
77
74
  end
78
75
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsense-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.10
4
+ version: 0.5.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric West
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-06-26 00:00:00.000000000 Z
12
+ date: 2014-07-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rsense-core
@@ -17,12 +17,12 @@ dependencies:
17
17
  requirements:
18
18
  - - ~>
19
19
  - !ruby/object:Gem::Version
20
- version: 0.6.2
20
+ version: 0.6.6
21
21
  requirement: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - ~>
24
24
  - !ruby/object:Gem::Version
25
- version: 0.6.2
25
+ version: 0.6.6
26
26
  prerelease: false
27
27
  type: :runtime
28
28
  - !ruby/object:Gem::Dependency
@@ -213,6 +213,7 @@ email:
213
213
  - tomo@cx4a.org
214
214
  executables:
215
215
  - _rsense.rb
216
+ - _rsense_commandline.rb
216
217
  extensions: []
217
218
  extra_rdoc_files: []
218
219
  files:
@@ -223,15 +224,18 @@ files:
223
224
  - README.md
224
225
  - Rakefile
225
226
  - bin/_rsense.rb
227
+ - bin/_rsense_commandline.rb
226
228
  - config/puma.rb
227
229
  - lib/rsense/server.rb
228
230
  - lib/rsense/server/code.rb
229
231
  - lib/rsense/server/command.rb
230
232
  - lib/rsense/server/command/alias_native_method.rb
231
233
  - lib/rsense/server/command/completion_result.rb
234
+ - lib/rsense/server/command/graph.rb
232
235
  - lib/rsense/server/command/native_attr_method.rb
233
236
  - lib/rsense/server/command/preload.rb
234
237
  - lib/rsense/server/command/rsense_method.rb
238
+ - lib/rsense/server/command/runtime_helper.rb
235
239
  - lib/rsense/server/command/special_meth.rb
236
240
  - lib/rsense/server/command/type_inference_method.rb
237
241
  - lib/rsense/server/config.rb