From 19eacb29aeaf47e01071e5dfe791117e2991556b Mon Sep 17 00:00:00 2001 From: Raymond Muller Date: Mon, 14 Mar 2022 23:43:43 +0100 Subject: [PATCH 1/5] test --- lib/prettier.rb | 8 ++++++++ src/haml/parser.rb | 8 ++++++++ src/rbs/parser.rb | 8 ++++++++ 3 files changed, 24 insertions(+) diff --git a/lib/prettier.rb b/lib/prettier.rb index 47b36b2d..7dfe92b4 100644 --- a/lib/prettier.rb +++ b/lib/prettier.rb @@ -3,6 +3,14 @@ require 'json' unless defined?(JSON) require 'open3' +class String + def match?(pattern) + pattern = Regexp.new(Regexp.escape(pattern)) unless pattern.is_a?(Regexp) + !!(self =~ pattern) + end +end + + module Prettier PLUGIN = -File.expand_path('..', __dir__) BINARY = -File.join(PLUGIN, 'node_modules', 'prettier', 'bin-prettier.js') diff --git a/src/haml/parser.rb b/src/haml/parser.rb index 84d84e3c..af7f8c1e 100644 --- a/src/haml/parser.rb +++ b/src/haml/parser.rb @@ -2,6 +2,14 @@ require 'ripper' +class String + def match?(pattern) + pattern = Regexp.new(Regexp.escape(pattern)) unless pattern.is_a?(Regexp) + !!(self =~ pattern) + end +end + + begin require 'haml' rescue LoadError diff --git a/src/rbs/parser.rb b/src/rbs/parser.rb index 39e15075..5879a0c9 100644 --- a/src/rbs/parser.rb +++ b/src/rbs/parser.rb @@ -1,5 +1,13 @@ #!/usr/bin/env ruby +class String + def match?(pattern) + pattern = Regexp.new(Regexp.escape(pattern)) unless pattern.is_a?(Regexp) + !!(self =~ pattern) + end +end + + begin require 'rbs' rescue LoadError From e952fc4a57d43fe83d1ce0c1f115a20d1255f08a Mon Sep 17 00:00:00 2001 From: Raymond Muller Date: Thu, 17 Mar 2022 11:12:29 +0100 Subject: [PATCH 2/5] begin rescue --- src/parser/server.rb | 55 +++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/src/parser/server.rb b/src/parser/server.rb index 39c06f7c..2fe7bf97 100644 --- a/src/parser/server.rb +++ b/src/parser/server.rb @@ -69,25 +69,26 @@ module Prettier # Start up a new thread that will handle each successive connection. Thread.new(server.accept_nonblock) do |socket| - parser, source = socket.read.force_encoding('UTF-8').split('|', 2) - - response = - case parser - when 'ping' - 'pong' - when 'ruby' - SyntaxTree.parse(source) - when 'rbs' - Prettier::RBSParser.parse(source) - when 'haml' - Prettier::HAMLParser.parse(source) + begin + parser, source = socket.read.force_encoding('UTF-8').split('|', 2) + + response = + case parser + when 'ping' + 'pong' + when 'ruby' + SyntaxTree.parse(source) + when 'rbs' + Prettier::RBSParser.parse(source) + when 'haml' + Prettier::HAMLParser.parse(source) + end + + if response + socket.write(JSON.fast_generate(response)) + else + socket.write('{ "error": true }') end - - if response - socket.write(JSON.fast_generate(response)) - else - socket.write('{ "error": true }') - end rescue SyntaxTree::ParseError => error loc = { start: { line: error.lineno, column: error.column } } socket.write(JSON.fast_generate(error: error.message, loc: loc)) @@ -114,16 +115,18 @@ module Prettier # Map each candidate connection method to a thread that will check if it works. candidates.map! do |candidate| Thread.new do - Thread.current.report_on_exception = false + begin + Thread.current.report_on_exception = false - # We do not care about stderr here, so throw it away - stdout, _stderr, status = - Open3.capture3("#{candidate} #{information}", stdin_data: 'ping') + # We do not care about stderr here, so throw it away + stdout, _stderr, status = + Open3.capture3("#{candidate} #{information}", stdin_data: 'ping') - candidate if JSON.parse(stdout) == 'pong' && status.exitstatus == 0 - rescue StandardError - # We don't actually care if this fails, because we'll just skip that - # connection option. + candidate if JSON.parse(stdout) == 'pong' && status.exitstatus == 0 + rescue StandardError + # We don't actually care if this fails, because we'll just skip that + # connection option. + end end end From 2781bde6a207ca81c8722ae9d72e0db9028d0b4c Mon Sep 17 00:00:00 2001 From: Raymond Muller Date: Thu, 17 Mar 2022 11:35:58 +0100 Subject: [PATCH 3/5] test --- src/parser/server.rb | 78 +++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/src/parser/server.rb b/src/parser/server.rb index 2fe7bf97..ddc5cc39 100644 --- a/src/parser/server.rb +++ b/src/parser/server.rb @@ -68,47 +68,49 @@ module Prettier break if quit # Start up a new thread that will handle each successive connection. - Thread.new(server.accept_nonblock) do |socket| - begin - parser, source = socket.read.force_encoding('UTF-8').split('|', 2) - - response = - case parser - when 'ping' - 'pong' - when 'ruby' - SyntaxTree.parse(source) - when 'rbs' - Prettier::RBSParser.parse(source) - when 'haml' - Prettier::HAMLParser.parse(source) + begin + Thread.new(server.accept_nonblock) do |socket| + begin + parser, source = socket.read.force_encoding('UTF-8').split('|', 2) + + response = + case parser + when 'ping' + 'pong' + when 'ruby' + SyntaxTree.parse(source) + when 'rbs' + Prettier::RBSParser.parse(source) + when 'haml' + Prettier::HAMLParser.parse(source) + end + + if response + socket.write(JSON.fast_generate(response)) + else + socket.write('{ "error": true }') end - - if response - socket.write(JSON.fast_generate(response)) - else - socket.write('{ "error": true }') + rescue SyntaxTree::ParseError => error + loc = { start: { line: error.lineno, column: error.column } } + socket.write(JSON.fast_generate(error: error.message, loc: loc)) + rescue StandardError => error + begin + socket.write(JSON.fast_generate(error: error.message)) + rescue Errno::EPIPE + # Do nothing, the pipe has been closed by the parent process so we don't + # actually care about writing to it anymore. + end + ensure + socket.close end - rescue SyntaxTree::ParseError => error - loc = { start: { line: error.lineno, column: error.column } } - socket.write(JSON.fast_generate(error: error.message, loc: loc)) - rescue StandardError => error - begin - socket.write(JSON.fast_generate(error: error.message)) - rescue Errno::EPIPE - # Do nothing, the pipe has been closed by the parent process so we don't - # actually care about writing to it anymore. - end - ensure - socket.close - end - rescue IO::WaitReadable, Errno::EINTR - # Wait for select(2) to give us a connection that has content for 1 - # second. Otherwise timeout and continue on (so that we hit our - # "break if quit" pretty often). - IO.select([server], nil, nil, 1) + rescue IO::WaitReadable, Errno::EINTR + # Wait for select(2) to give us a connection that has content for 1 + # second. Otherwise timeout and continue on (so that we hit our + # "break if quit" pretty often). + IO.select([server], nil, nil, 1) - retry unless quit + retry unless quit + end end end From ad32d7d0a4f79498d873a1552a169bc0da84fb78 Mon Sep 17 00:00:00 2001 From: Raymond Muller Date: Thu, 17 Mar 2022 11:52:45 +0100 Subject: [PATCH 4/5] fix --- src/parser/server.rb | 1 + src/rbs/parser.rb | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/parser/server.rb b/src/parser/server.rb index ddc5cc39..5a95564f 100644 --- a/src/parser/server.rb +++ b/src/parser/server.rb @@ -103,6 +103,7 @@ module Prettier ensure socket.close end + end rescue IO::WaitReadable, Errno::EINTR # Wait for select(2) to give us a connection that has content for 1 # second. Otherwise timeout and continue on (so that we hit our diff --git a/src/rbs/parser.rb b/src/rbs/parser.rb index 5879a0c9..e71ace50 100644 --- a/src/rbs/parser.rb +++ b/src/rbs/parser.rb @@ -23,8 +23,6 @@ def self.parse(text) false end end - - return end # This was removed at some point, so we need to support both versions. From 07485bf702ef6038fd9afc71e8045a655c517752 Mon Sep 17 00:00:00 2001 From: Raymond Muller Date: Thu, 17 Mar 2022 11:55:18 +0100 Subject: [PATCH 5/5] fix --- src/rbs/parser.rb | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/rbs/parser.rb b/src/rbs/parser.rb index e71ace50..2bc12ce2 100644 --- a/src/rbs/parser.rb +++ b/src/rbs/parser.rb @@ -1,13 +1,5 @@ #!/usr/bin/env ruby -class String - def match?(pattern) - pattern = Regexp.new(Regexp.escape(pattern)) unless pattern.is_a?(Regexp) - !!(self =~ pattern) - end -end - - begin require 'rbs' rescue LoadError @@ -25,6 +17,16 @@ def self.parse(text) end end + +class String + def match?(pattern) + pattern = Regexp.new(Regexp.escape(pattern)) unless pattern.is_a?(Regexp) + !!(self =~ pattern) + end +end + + + # This was removed at some point, so we need to support both versions. RBS::KEYWORD_RAW = if RBS::Parser.const_defined?(:KEYWORDS_RE)