|
9 | 9 | module RubyLsp
|
10 | 10 | module Rails
|
11 | 11 | class Server
|
12 |
| - VOID = Object.new |
13 |
| - |
14 | 12 | def initialize
|
15 | 13 | # Grab references to the original pipes so that we can change the default output device further down
|
16 | 14 | @stdin = $stdin
|
@@ -44,39 +42,36 @@ def start
|
44 | 42 | json = @stdin.read(headers[/Content-Length: (\d+)/i, 1].to_i)
|
45 | 43 |
|
46 | 44 | request = JSON.parse(json, symbolize_names: true)
|
47 |
| - response = execute(request.fetch(:method), request[:params]) |
48 |
| - next if response == VOID |
49 |
| - |
50 |
| - json_response = response.to_json |
51 |
| - @stdout.write("Content-Length: #{json_response.length}\r\n\r\n#{json_response}") |
| 45 | + execute(request.fetch(:method), request[:params]) |
52 | 46 | end
|
53 | 47 | end
|
54 | 48 |
|
55 | 49 | def execute(request, params)
|
56 | 50 | case request
|
57 | 51 | when "shutdown"
|
58 | 52 | @running = false
|
59 |
| - VOID |
60 | 53 | when "model"
|
61 |
| - resolve_database_info_from_model(params.fetch(:name)) |
| 54 | + write_response(resolve_database_info_from_model(params.fetch(:name))) |
62 | 55 | when "association_target_location"
|
63 |
| - resolve_association_target(params) |
| 56 | + write_response(resolve_association_target(params)) |
64 | 57 | when "reload"
|
65 | 58 | ::Rails.application.reloader.reload!
|
66 |
| - VOID |
67 | 59 | when "route_location"
|
68 |
| - route_location(params.fetch(:name)) |
| 60 | + write_response(route_location(params.fetch(:name))) |
69 | 61 | when "route_info"
|
70 |
| - resolve_route_info(params) |
71 |
| - else |
72 |
| - VOID |
| 62 | + write_response(resolve_route_info(params)) |
73 | 63 | end
|
74 | 64 | rescue => e
|
75 |
| - { error: e.full_message(highlight: false) } |
| 65 | + write_response({ error: e.full_message(highlight: false) }) |
76 | 66 | end
|
77 | 67 |
|
78 | 68 | private
|
79 | 69 |
|
| 70 | + def write_response(response) |
| 71 | + json_response = response.to_json |
| 72 | + @stdout.write("Content-Length: #{json_response.length}\r\n\r\n#{json_response}") |
| 73 | + end |
| 74 | + |
80 | 75 | def resolve_route_info(requirements)
|
81 | 76 | if requirements[:controller]
|
82 | 77 | requirements[:controller] = requirements.fetch(:controller).underscore.delete_suffix("_controller")
|
|
0 commit comments