collie-lsp 0.1.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 (38) hide show
  1. checksums.yaml +7 -0
  2. data/.collie.yml.example +144 -0
  3. data/.rspec +3 -0
  4. data/CHANGELOG.md +10 -0
  5. data/LICENSE +21 -0
  6. data/README.md +273 -0
  7. data/Rakefile +8 -0
  8. data/collie-lsp.gemspec +36 -0
  9. data/exe/collie-lsp +9 -0
  10. data/lib/collie_lsp/collie_wrapper.rb +97 -0
  11. data/lib/collie_lsp/document_store.rb +66 -0
  12. data/lib/collie_lsp/handlers/code_action.rb +77 -0
  13. data/lib/collie_lsp/handlers/completion.rb +72 -0
  14. data/lib/collie_lsp/handlers/definition.rb +117 -0
  15. data/lib/collie_lsp/handlers/diagnostics.rb +64 -0
  16. data/lib/collie_lsp/handlers/document_symbol.rb +185 -0
  17. data/lib/collie_lsp/handlers/folding_range.rb +211 -0
  18. data/lib/collie_lsp/handlers/formatting.rb +55 -0
  19. data/lib/collie_lsp/handlers/hover.rb +104 -0
  20. data/lib/collie_lsp/handlers/references.rb +185 -0
  21. data/lib/collie_lsp/handlers/rename.rb +226 -0
  22. data/lib/collie_lsp/handlers/semantic_tokens.rb +302 -0
  23. data/lib/collie_lsp/handlers/workspace_symbol.rb +161 -0
  24. data/lib/collie_lsp/protocol/initialize.rb +58 -0
  25. data/lib/collie_lsp/protocol/shutdown.rb +25 -0
  26. data/lib/collie_lsp/protocol/text_document.rb +81 -0
  27. data/lib/collie_lsp/server.rb +104 -0
  28. data/lib/collie_lsp/version.rb +5 -0
  29. data/lib/collie_lsp.rb +25 -0
  30. data/vscode-extension/.gitignore +3 -0
  31. data/vscode-extension/.vscode/launch.json +17 -0
  32. data/vscode-extension/.vscode/tasks.json +14 -0
  33. data/vscode-extension/README.md +35 -0
  34. data/vscode-extension/package.json +49 -0
  35. data/vscode-extension/src/extension.ts +48 -0
  36. data/vscode-extension/test-grammar.y +42 -0
  37. data/vscode-extension/tsconfig.json +12 -0
  38. metadata +98 -0
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CollieLsp
4
+ module Protocol
5
+ # Handles initialize and initialized LSP messages
6
+ module Initialize
7
+ module_function
8
+
9
+ # Handle initialize request
10
+ # @param request [Hash] LSP request
11
+ # @param writer [Object] Response writer
12
+ def handle(request, writer)
13
+ writer.write(
14
+ id: request[:id],
15
+ result: {
16
+ capabilities: {
17
+ textDocumentSync: {
18
+ openClose: true,
19
+ change: 2, # Incremental
20
+ save: { includeText: true }
21
+ },
22
+ documentFormattingProvider: true,
23
+ codeActionProvider: true,
24
+ hoverProvider: true,
25
+ completionProvider: {
26
+ triggerCharacters: ['%', '$']
27
+ },
28
+ definitionProvider: true,
29
+ referencesProvider: true,
30
+ documentSymbolProvider: true,
31
+ renameProvider: true,
32
+ semanticTokensProvider: {
33
+ legend: {
34
+ tokenTypes: Handlers::SemanticTokens::TOKEN_TYPES,
35
+ tokenModifiers: Handlers::SemanticTokens::TOKEN_MODIFIERS
36
+ },
37
+ full: true
38
+ },
39
+ workspaceSymbolProvider: true,
40
+ foldingRangeProvider: true
41
+ },
42
+ serverInfo: {
43
+ name: 'collie-lsp',
44
+ version: CollieLsp::VERSION
45
+ }
46
+ }
47
+ )
48
+ end
49
+
50
+ # Handle initialized notification
51
+ # @param _request [Hash] LSP request
52
+ # @param _writer [Object] Response writer
53
+ def handle_initialized(_request, _writer)
54
+ # Nothing to do for initialized notification
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CollieLsp
4
+ module Protocol
5
+ # Handles shutdown and exit LSP messages
6
+ module Shutdown
7
+ module_function
8
+
9
+ # Handle shutdown request
10
+ # @param request [Hash] LSP request
11
+ # @param writer [Object] Response writer
12
+ def handle(request, writer)
13
+ writer.write(
14
+ id: request[:id],
15
+ result: nil
16
+ )
17
+ end
18
+
19
+ # Handle exit notification
20
+ def handle_exit
21
+ exit(0)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CollieLsp
4
+ module Protocol
5
+ # Handles textDocument/* LSP messages
6
+ module TextDocument
7
+ module_function
8
+
9
+ # Handle textDocument/didOpen notification
10
+ # @param request [Hash] LSP request
11
+ # @param document_store [DocumentStore] Document store
12
+ # @param collie [CollieWrapper] Collie wrapper
13
+ # @param writer [Object] Response writer
14
+ def handle_did_open(request, document_store, collie, writer)
15
+ params = request[:params]
16
+ uri = params[:textDocument][:uri]
17
+ text = params[:textDocument][:text]
18
+ version = params[:textDocument][:version]
19
+
20
+ document_store.open(uri, text, version)
21
+ publish_diagnostics(uri, text, document_store, collie, writer)
22
+ end
23
+
24
+ # Handle textDocument/didChange notification
25
+ # @param request [Hash] LSP request
26
+ # @param document_store [DocumentStore] Document store
27
+ # @param collie [CollieWrapper] Collie wrapper
28
+ # @param writer [Object] Response writer
29
+ def handle_did_change(request, document_store, collie, writer)
30
+ params = request[:params]
31
+ uri = params[:textDocument][:uri]
32
+ version = params[:textDocument][:version]
33
+
34
+ # For full document sync (change: 1)
35
+ return unless params[:contentChanges]&.first&.dig(:text)
36
+
37
+ text = params[:contentChanges].first[:text]
38
+ document_store.change(uri, text, version)
39
+ publish_diagnostics(uri, text, document_store, collie, writer)
40
+ end
41
+
42
+ # Handle textDocument/didSave notification
43
+ # @param request [Hash] LSP request
44
+ # @param document_store [DocumentStore] Document store
45
+ # @param collie [CollieWrapper] Collie wrapper
46
+ # @param writer [Object] Response writer
47
+ def handle_did_save(request, document_store, collie, writer)
48
+ params = request[:params]
49
+ uri = params[:textDocument][:uri]
50
+ doc = document_store.get(uri)
51
+
52
+ return unless doc
53
+
54
+ publish_diagnostics(uri, doc[:text], document_store, collie, writer)
55
+ end
56
+
57
+ # Handle textDocument/didClose notification
58
+ # @param request [Hash] LSP request
59
+ # @param document_store [DocumentStore] Document store
60
+ # @param _collie [CollieWrapper] Collie wrapper (unused)
61
+ # @param _writer [Object] Response writer (unused)
62
+ def handle_did_close(request, document_store, _collie, _writer)
63
+ uri = request[:params][:textDocument][:uri]
64
+ document_store.close(uri)
65
+ end
66
+
67
+ # Publish diagnostics for a document
68
+ # @param uri [String] Document URI
69
+ # @param text [String] Document text
70
+ # @param document_store [DocumentStore] Document store
71
+ # @param collie [CollieWrapper] Collie wrapper
72
+ # @param writer [Object] Response writer
73
+ def publish_diagnostics(uri, text, document_store, collie, writer)
74
+ filename = uri.gsub(%r{^file://}, '')
75
+ offenses = collie.lint(text, filename: filename)
76
+
77
+ Handlers::Diagnostics.publish(uri, offenses, document_store, writer)
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'language_server-protocol'
4
+
5
+ module CollieLsp
6
+ # Main LSP server implementation
7
+ class Server
8
+ # Initialize server
9
+ # @param input [IO] Input stream (default: stdin)
10
+ # @param output [IO] Output stream (default: stdout)
11
+ def initialize(input: $stdin, output: $stdout)
12
+ @reader = LanguageServer::Protocol::Transport::Io::Reader.new(input)
13
+ @writer = LanguageServer::Protocol::Transport::Io::Writer.new(output)
14
+ @document_store = DocumentStore.new
15
+ @collie = nil
16
+ @workspace_root = nil
17
+ end
18
+
19
+ # Start the server
20
+ def start
21
+ @reader.read do |request|
22
+ handle_request(request)
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ # Handle an LSP request
29
+ # @param request [Hash] LSP request message
30
+ def handle_request(request)
31
+ case request[:method]
32
+ when 'initialize'
33
+ handle_initialize(request)
34
+ when 'initialized'
35
+ Protocol::Initialize.handle_initialized(request, @writer)
36
+ when 'textDocument/didOpen'
37
+ Protocol::TextDocument.handle_did_open(request, @document_store, @collie, @writer)
38
+ when 'textDocument/didChange'
39
+ Protocol::TextDocument.handle_did_change(request, @document_store, @collie, @writer)
40
+ when 'textDocument/didSave'
41
+ Protocol::TextDocument.handle_did_save(request, @document_store, @collie, @writer)
42
+ when 'textDocument/didClose'
43
+ Protocol::TextDocument.handle_did_close(request, @document_store, @collie, @writer)
44
+ when 'textDocument/formatting'
45
+ Handlers::Formatting.handle(request, @document_store, @collie, @writer)
46
+ when 'textDocument/codeAction'
47
+ Handlers::CodeAction.handle(request, @document_store, @collie, @writer)
48
+ when 'textDocument/hover'
49
+ Handlers::Hover.handle(request, @document_store, @collie, @writer)
50
+ when 'textDocument/completion'
51
+ Handlers::Completion.handle(request, @document_store, @collie, @writer)
52
+ when 'textDocument/definition'
53
+ Handlers::Definition.handle(request, @document_store, @collie, @writer)
54
+ when 'textDocument/references'
55
+ Handlers::References.handle(request, @document_store, @collie, @writer)
56
+ when 'textDocument/documentSymbol'
57
+ Handlers::DocumentSymbol.handle(request, @document_store, @collie, @writer)
58
+ when 'textDocument/rename'
59
+ Handlers::Rename.handle(request, @document_store, @collie, @writer)
60
+ when 'textDocument/semanticTokens/full'
61
+ Handlers::SemanticTokens.handle(request, @document_store, @collie, @writer)
62
+ when 'workspace/symbol'
63
+ Handlers::WorkspaceSymbol.handle(request, @document_store, @collie, @writer)
64
+ when 'textDocument/foldingRange'
65
+ Handlers::FoldingRange.handle(request, @document_store, @collie, @writer)
66
+ when 'shutdown'
67
+ Protocol::Shutdown.handle(request, @writer)
68
+ when 'exit'
69
+ Protocol::Shutdown.handle_exit
70
+ end
71
+ rescue StandardError => e
72
+ log_error("Error handling request: #{e.message}\n#{e.backtrace.join("\n")}")
73
+ end
74
+
75
+ # Handle initialize request and set up workspace
76
+ # @param request [Hash] LSP initialize request
77
+ def handle_initialize(request)
78
+ @workspace_root = extract_workspace_root(request)
79
+ @collie = CollieWrapper.new(workspace_root: @workspace_root)
80
+ Protocol::Initialize.handle(request, @writer)
81
+ end
82
+
83
+ # Extract workspace root from initialize request
84
+ # @param request [Hash] LSP initialize request
85
+ # @return [String, nil] Workspace root path or nil
86
+ def extract_workspace_root(request)
87
+ params = request[:params]
88
+ root_uri = params[:rootUri]
89
+ return nil unless root_uri
90
+
91
+ root_uri.gsub(%r{^file://}, '')
92
+ end
93
+
94
+ # Log error message
95
+ # @param message [String] Error message
96
+ def log_error(message)
97
+ return unless ENV['COLLIE_LSP_LOG']
98
+
99
+ File.open(ENV.fetch('COLLIE_LSP_LOG', nil), 'a') do |f|
100
+ f.puts "[#{Time.now}] ERROR: #{message}"
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CollieLsp
4
+ VERSION = '0.1.0'
5
+ end
data/lib/collie_lsp.rb ADDED
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'collie_lsp/version'
4
+ require_relative 'collie_lsp/server'
5
+ require_relative 'collie_lsp/document_store'
6
+ require_relative 'collie_lsp/collie_wrapper'
7
+ require_relative 'collie_lsp/protocol/initialize'
8
+ require_relative 'collie_lsp/protocol/text_document'
9
+ require_relative 'collie_lsp/protocol/shutdown'
10
+ require_relative 'collie_lsp/handlers/diagnostics'
11
+ require_relative 'collie_lsp/handlers/formatting'
12
+ require_relative 'collie_lsp/handlers/code_action'
13
+ require_relative 'collie_lsp/handlers/hover'
14
+ require_relative 'collie_lsp/handlers/completion'
15
+ require_relative 'collie_lsp/handlers/definition'
16
+ require_relative 'collie_lsp/handlers/references'
17
+ require_relative 'collie_lsp/handlers/document_symbol'
18
+ require_relative 'collie_lsp/handlers/rename'
19
+ require_relative 'collie_lsp/handlers/semantic_tokens'
20
+ require_relative 'collie_lsp/handlers/workspace_symbol'
21
+ require_relative 'collie_lsp/handlers/folding_range'
22
+
23
+ module CollieLsp
24
+ class Error < StandardError; end
25
+ end
@@ -0,0 +1,3 @@
1
+ node_modules/
2
+ out/
3
+ *.vsix
@@ -0,0 +1,17 @@
1
+ {
2
+ "version": "0.2.0",
3
+ "configurations": [
4
+ {
5
+ "name": "Run Extension",
6
+ "type": "extensionHost",
7
+ "request": "launch",
8
+ "args": [
9
+ "--extensionDevelopmentPath=${workspaceFolder}"
10
+ ],
11
+ "outFiles": [
12
+ "${workspaceFolder}/out/**/*.js"
13
+ ],
14
+ "preLaunchTask": "${defaultBuildTask}"
15
+ }
16
+ ]
17
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "version": "2.0.0",
3
+ "tasks": [
4
+ {
5
+ "type": "npm",
6
+ "script": "compile",
7
+ "group": "build",
8
+ "presentation": {
9
+ "reveal": "silent"
10
+ },
11
+ "problemMatcher": "$tsc"
12
+ }
13
+ ]
14
+ }
@@ -0,0 +1,35 @@
1
+ # Collie LSP Test Extension
2
+
3
+ Test extension for developing and testing collie-lsp.
4
+
5
+ ## Setup
6
+
7
+ ```bash
8
+ # Install dependencies
9
+ npm install
10
+
11
+ # Compile TypeScript
12
+ npm run compile
13
+ ```
14
+
15
+ ## Testing
16
+
17
+ 1. Open this folder in VS Code
18
+ 2. Press F5 to launch Extension Development Host
19
+ 3. Create a test .y file
20
+ 4. Verify LSP features work (diagnostics, completion, etc.)
21
+
22
+ ## Configuration
23
+
24
+ In the Extension Development Host, you can configure:
25
+
26
+ ```json
27
+ {
28
+ "collie-lsp.serverPath": "/path/to/collie-lsp",
29
+ "collie-lsp.trace.server": "verbose"
30
+ }
31
+ ```
32
+
33
+ ## Viewing LSP Communication
34
+
35
+ Open Output panel (View > Output) and select "Collie LSP" from the dropdown.
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "collie-lsp-test",
3
+ "displayName": "Collie LSP Test",
4
+ "description": "Test extension for collie-lsp",
5
+ "version": "0.0.1",
6
+ "engines": {
7
+ "vscode": "^1.75.0"
8
+ },
9
+ "categories": ["Programming Languages"],
10
+ "activationEvents": ["onLanguage:yacc"],
11
+ "main": "./out/extension.js",
12
+ "contributes": {
13
+ "languages": [{
14
+ "id": "yacc",
15
+ "extensions": [".y"],
16
+ "aliases": ["Yacc", "yacc"]
17
+ }],
18
+ "configuration": {
19
+ "type": "object",
20
+ "title": "Collie LSP",
21
+ "properties": {
22
+ "collie-lsp.serverPath": {
23
+ "type": "string",
24
+ "default": "collie-lsp",
25
+ "description": "Path to collie-lsp executable"
26
+ },
27
+ "collie-lsp.trace.server": {
28
+ "type": "string",
29
+ "enum": ["off", "messages", "verbose"],
30
+ "default": "verbose",
31
+ "description": "Traces the communication between VS Code and the language server"
32
+ }
33
+ }
34
+ }
35
+ },
36
+ "scripts": {
37
+ "vscode:prepublish": "npm run compile",
38
+ "compile": "tsc -p ./",
39
+ "watch": "tsc -watch -p ./"
40
+ },
41
+ "dependencies": {
42
+ "vscode-languageclient": "^9.0.1"
43
+ },
44
+ "devDependencies": {
45
+ "@types/node": "^20.0.0",
46
+ "@types/vscode": "^1.75.0",
47
+ "typescript": "^5.0.0"
48
+ }
49
+ }
@@ -0,0 +1,48 @@
1
+ import * as path from 'path';
2
+ import { workspace, ExtensionContext } from 'vscode';
3
+ import {
4
+ LanguageClient,
5
+ LanguageClientOptions,
6
+ ServerOptions,
7
+ TransportKind
8
+ } from 'vscode-languageclient/node';
9
+
10
+ let client: LanguageClient;
11
+
12
+ export function activate(context: ExtensionContext) {
13
+ // Get server path from configuration
14
+ const config = workspace.getConfiguration('collie-lsp');
15
+ const serverPath = config.get<string>('serverPath') || 'collie-lsp';
16
+
17
+ // Server options
18
+ const serverOptions: ServerOptions = {
19
+ command: serverPath,
20
+ args: ['--stdio'],
21
+ transport: TransportKind.stdio
22
+ };
23
+
24
+ // Client options
25
+ const clientOptions: LanguageClientOptions = {
26
+ documentSelector: [{ scheme: 'file', language: 'yacc' }],
27
+ synchronize: {
28
+ fileEvents: workspace.createFileSystemWatcher('**/.y')
29
+ }
30
+ };
31
+
32
+ // Create and start the client
33
+ client = new LanguageClient(
34
+ 'collie-lsp',
35
+ 'Collie LSP',
36
+ serverOptions,
37
+ clientOptions
38
+ );
39
+
40
+ client.start();
41
+ }
42
+
43
+ export function deactivate(): Thenable<void> | undefined {
44
+ if (!client) {
45
+ return undefined;
46
+ }
47
+ return client.stop();
48
+ }
@@ -0,0 +1,42 @@
1
+ %{
2
+ /* Test grammar file for collie-lsp */
3
+ #include <stdio.h>
4
+ %}
5
+
6
+ %token NUMBER
7
+ %token IDENTIFIER
8
+ %token PLUS MINUS
9
+ %token TIMES DIVIDE
10
+
11
+ %left PLUS MINUS
12
+ %left TIMES DIVIDE
13
+
14
+ %%
15
+
16
+ program
17
+ : expression
18
+ ;
19
+
20
+ expression
21
+ : expression PLUS term
22
+ | expression MINUS term
23
+ | term
24
+ ;
25
+
26
+ term
27
+ : term TIMES factor
28
+ | term DIVIDE factor
29
+ | factor
30
+ ;
31
+
32
+ factor
33
+ : NUMBER
34
+ | IDENTIFIER
35
+ | '(' expression ')'
36
+ ;
37
+
38
+ %%
39
+
40
+ int main() {
41
+ return 0;
42
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "compilerOptions": {
3
+ "module": "commonjs",
4
+ "target": "ES2020",
5
+ "outDir": "out",
6
+ "lib": ["ES2020"],
7
+ "sourceMap": true,
8
+ "rootDir": "src",
9
+ "strict": true
10
+ },
11
+ "exclude": ["node_modules", ".vscode-test"]
12
+ }
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: collie-lsp
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Yudai Takada
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: language_server-protocol
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: 3.17.0
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: 3.17.0
26
+ description: collie-lsp provides real-time linting, formatting, and code intelligence
27
+ features for .y grammar files in any LSP-compatible editor
28
+ email:
29
+ - t.yudai92@gmail.com
30
+ executables:
31
+ - collie-lsp
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - ".collie.yml.example"
36
+ - ".rspec"
37
+ - CHANGELOG.md
38
+ - LICENSE
39
+ - README.md
40
+ - Rakefile
41
+ - collie-lsp.gemspec
42
+ - exe/collie-lsp
43
+ - lib/collie_lsp.rb
44
+ - lib/collie_lsp/collie_wrapper.rb
45
+ - lib/collie_lsp/document_store.rb
46
+ - lib/collie_lsp/handlers/code_action.rb
47
+ - lib/collie_lsp/handlers/completion.rb
48
+ - lib/collie_lsp/handlers/definition.rb
49
+ - lib/collie_lsp/handlers/diagnostics.rb
50
+ - lib/collie_lsp/handlers/document_symbol.rb
51
+ - lib/collie_lsp/handlers/folding_range.rb
52
+ - lib/collie_lsp/handlers/formatting.rb
53
+ - lib/collie_lsp/handlers/hover.rb
54
+ - lib/collie_lsp/handlers/references.rb
55
+ - lib/collie_lsp/handlers/rename.rb
56
+ - lib/collie_lsp/handlers/semantic_tokens.rb
57
+ - lib/collie_lsp/handlers/workspace_symbol.rb
58
+ - lib/collie_lsp/protocol/initialize.rb
59
+ - lib/collie_lsp/protocol/shutdown.rb
60
+ - lib/collie_lsp/protocol/text_document.rb
61
+ - lib/collie_lsp/server.rb
62
+ - lib/collie_lsp/version.rb
63
+ - vscode-extension/.gitignore
64
+ - vscode-extension/.vscode/launch.json
65
+ - vscode-extension/.vscode/tasks.json
66
+ - vscode-extension/README.md
67
+ - vscode-extension/package.json
68
+ - vscode-extension/src/extension.ts
69
+ - vscode-extension/test-grammar.y
70
+ - vscode-extension/tsconfig.json
71
+ homepage: https://github.com/ydah/collie-lsp
72
+ licenses:
73
+ - MIT
74
+ metadata:
75
+ homepage_uri: https://github.com/ydah/collie-lsp
76
+ source_code_uri: https://github.com/ydah/collie-lsp
77
+ changelog_uri: https://github.com/ydah/collie-lsp/blob/main/CHANGELOG.md
78
+ bug_tracker_uri: https://github.com/ydah/collie-lsp/issues
79
+ documentation_uri: https://github.com/ydah/collie-lsp/blob/main/README.md
80
+ rubygems_mfa_required: 'true'
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 3.2.0
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubygems_version: 3.6.9
96
+ specification_version: 4
97
+ summary: Language Server Protocol implementation for Lrama Style BNF grammar files
98
+ test_files: []