solargraph 0.37.2 → 0.38.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c6e8cd33eaba452660f445e5edf77658e1a3bf0e7604b753b6632e06ce4af00
4
- data.tar.gz: bf6d0596a144b1bee2968e87f451b02a60cafa35c9871a0abe8b0f29a1c360cc
3
+ metadata.gz: 0b51cc5aaad5a07e4b7a5f6d2678b3fa42ffba42e7eb5aef0a9dca1834fe3b32
4
+ data.tar.gz: eef096fe46ea782d8d1b747f4bf1faa80c3cac9caf80b6f212face3ae8d45392
5
5
  SHA512:
6
- metadata.gz: 5f28aa0e7914a6d8f04bb25ea99f81cbb795a1d1bb76121397aa291e0db1132e108fd71ed814d4b65807ed985dbf60b4909a20e976cca0ed80c66e6770224b7c
7
- data.tar.gz: 79cc5e511a24c736f7564233f9c0bdc0593b738c739c9fc7897bca7e3b2e2361d0f520ccea009514acc4f2dcd4d60b05778487af2c4d18367a0222abe40b1e65
6
+ metadata.gz: 47f9cdd2ef911ab8ace7de207503c53bc518aaa1b303bb2bc097b86cca229d73886ad8fa0bd7d502794cc8ec67c4c9a9077bd75b2c06e9e9bb39e3879a102eef
7
+ data.tar.gz: 698d1343b2843767c9a51d7330f0af2c4202018b1e9cd3e78179f3dd709d1a4a48b5b01ada8d867b8107c4b297a5bc34305989f4adaa7e9057732f1298b54975
@@ -1,9 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'yard'
3
+ # require 'yard'
4
4
  require 'solargraph/version'
5
- require 'rubygems/package'
6
- require 'yard-solargraph'
5
+ # require 'yard-solargraph'
7
6
 
8
7
  # The top-level namespace for the Solargraph code mapping, documentation,
9
8
  # static analysis, and language server libraries.
@@ -53,7 +52,3 @@ module Solargraph
53
52
  Solargraph::Logging.logger
54
53
  end
55
54
  end
56
-
57
- Solargraph::YardMap::CoreDocs.require_minimum
58
- # Change YARD log IO to avoid sending unexpected messages to STDOUT
59
- YARD::Logger.instance.io = File.new(File::NULL, 'w')
@@ -3,6 +3,8 @@
3
3
  require 'rubygems'
4
4
  require 'set'
5
5
  require 'pathname'
6
+ require 'yard'
7
+ require 'yard-solargraph'
6
8
 
7
9
  module Solargraph
8
10
  # An aggregate provider for information about workspaces, sources, gems, and
@@ -147,7 +147,14 @@ module Solargraph
147
147
  base = ''
148
148
  name = fqns
149
149
  end
150
- namespace_children(base).select{|pin| pin.name == name && pin.is_a?(Pin::Namespace)}
150
+ fqns_pins_map[[base, name]]
151
+ end
152
+
153
+ def fqns_pins_map
154
+ @fqns_pins_map ||= Hash.new do |h, (base, name)|
155
+ value = namespace_children(base).select { |pin| pin.name == name && pin.is_a?(Pin::Namespace) }
156
+ h[[base, name]] = value
157
+ end
151
158
  end
152
159
 
153
160
  # @return [Array<Solargraph::Pin::Symbol>]
@@ -20,6 +20,7 @@ module Solargraph
20
20
  # @return [ComplexType]
21
21
  def qualify api_map, context = ''
22
22
  types = @items.map do |t|
23
+ next t if ['Boolean', 'nil', 'void', 'undefined'].include?(t.name)
23
24
  t.qualify api_map, context
24
25
  end
25
26
  ComplexType.new(types)
@@ -0,0 +1,12 @@
1
+ module ReverseMarkdown
2
+ module Converters
3
+ class Dd < Base
4
+ def convert node, state = {}
5
+ content = treat_children(node, state)
6
+ ": #{content.strip}\n"
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ ReverseMarkdown::Converters.register :dd, ReverseMarkdown::Converters::Dd.new
@@ -0,0 +1,12 @@
1
+ module ReverseMarkdown
2
+ module Converters
3
+ class Dl < Base
4
+ def convert node, state = {}
5
+ content = treat_children(node, state).strip
6
+ "\n\n#{content}\n"
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ ReverseMarkdown::Converters.register :dl, ReverseMarkdown::Converters::Dl.new
@@ -0,0 +1,12 @@
1
+ module ReverseMarkdown
2
+ module Converters
3
+ class Dt < Base
4
+ def convert node, state = {}
5
+ content = treat_children(node, state)
6
+ "\n#{content.strip}\n"
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ ReverseMarkdown::Converters.register :dt, ReverseMarkdown::Converters::Dt.new
@@ -0,0 +1 @@
1
+ ReverseMarkdown::Converters.register :tt, ReverseMarkdown::Converters::Code.new
@@ -35,17 +35,6 @@ module Solargraph
35
35
 
36
36
  private
37
37
 
38
- # @todo This is a smelly way to redirect output, but the RuboCop specs do
39
- # the same thing.
40
- # @return [String]
41
- def redirect_stdout
42
- redir = StringIO.new
43
- $stdout = redir
44
- yield if block_given?
45
- $stdout = STDOUT
46
- redir.string
47
- end
48
-
49
38
  # @param resp [Hash]
50
39
  # @return [Array<Hash>]
51
40
  def make_array resp
@@ -45,6 +45,17 @@ module Solargraph
45
45
  return path unless path.match(/^[a-z]:/)
46
46
  path[0].upcase + path[1..-1]
47
47
  end
48
+
49
+ # @todo This is a smelly way to redirect output, but the RuboCop specs do
50
+ # the same thing.
51
+ # @return [String]
52
+ def redirect_stdout
53
+ redir = StringIO.new
54
+ $stdout = redir
55
+ yield if block_given?
56
+ $stdout = STDOUT
57
+ redir.string
58
+ end
48
59
  end
49
60
  end
50
61
  end
@@ -56,38 +56,38 @@ module Solargraph
56
56
  end
57
57
  end
58
58
 
59
- register 'initialize', Initialize
60
- register 'initialized', Initialized
61
- register 'textDocument/completion', TextDocument::Completion
62
- register 'completionItem/resolve', CompletionItem::Resolve
63
- register 'textDocument/signatureHelp', TextDocument::SignatureHelp
64
- register 'textDocument/didOpen', TextDocument::DidOpen
65
- register 'textDocument/didChange', TextDocument::DidChange
66
- register 'textDocument/didSave', TextDocument::DidSave
67
- register 'textDocument/didClose', TextDocument::DidClose
68
- register 'textDocument/hover', TextDocument::Hover
69
- register 'textDocument/definition', TextDocument::Definition
70
- register 'textDocument/formatting', TextDocument::Formatting
71
- register 'textDocument/onTypeFormatting', TextDocument::OnTypeFormatting
72
- register 'textDocument/documentSymbol', TextDocument::DocumentSymbol
73
- register 'textDocument/references', TextDocument::References
74
- register 'textDocument/rename', TextDocument::Rename
75
- register 'textDocument/prepareRename', TextDocument::PrepareRename
76
- register 'textDocument/foldingRange', TextDocument::FoldingRange
77
- register 'textDocument/codeAction', TextDocument::CodeAction
78
- register 'workspace/didChangeWatchedFiles', Workspace::DidChangeWatchedFiles
79
- register 'workspace/didChangeConfiguration', Workspace::DidChangeConfiguration
59
+ register 'initialize', Initialize
60
+ register 'initialized', Initialized
61
+ register 'textDocument/completion', TextDocument::Completion
62
+ register 'completionItem/resolve', CompletionItem::Resolve
63
+ register 'textDocument/signatureHelp', TextDocument::SignatureHelp
64
+ register 'textDocument/didOpen', TextDocument::DidOpen
65
+ register 'textDocument/didChange', TextDocument::DidChange
66
+ register 'textDocument/didSave', TextDocument::DidSave
67
+ register 'textDocument/didClose', TextDocument::DidClose
68
+ register 'textDocument/hover', TextDocument::Hover
69
+ register 'textDocument/definition', TextDocument::Definition
70
+ register 'textDocument/formatting', TextDocument::Formatting
71
+ register 'textDocument/onTypeFormatting', TextDocument::OnTypeFormatting
72
+ register 'textDocument/documentSymbol', TextDocument::DocumentSymbol
73
+ register 'textDocument/references', TextDocument::References
74
+ register 'textDocument/rename', TextDocument::Rename
75
+ register 'textDocument/prepareRename', TextDocument::PrepareRename
76
+ register 'textDocument/foldingRange', TextDocument::FoldingRange
77
+ register 'textDocument/codeAction', TextDocument::CodeAction
78
+ register 'workspace/didChangeWatchedFiles', Workspace::DidChangeWatchedFiles
79
+ register 'workspace/didChangeConfiguration', Workspace::DidChangeConfiguration
80
80
  register 'workspace/didChangeWorkspaceFolders', Workspace::DidChangeWorkspaceFolders
81
- register 'workspace/symbol', Workspace::WorkspaceSymbol
82
- register '$/cancelRequest', CancelRequest
83
- register '$/solargraph/document', Extended::Document
84
- register '$/solargraph/search', Extended::Search
85
- register '$/solargraph/checkGemVersion', Extended::CheckGemVersion
86
- register '$/solargraph/documentGems', Extended::DocumentGems
87
- register '$/solargraph/downloadCore', Extended::DownloadCore
88
- register '$/solargraph/environment', Extended::Environment
89
- register 'shutdown', Shutdown
90
- register 'exit', ExitNotification
81
+ register 'workspace/symbol', Workspace::WorkspaceSymbol
82
+ register '$/cancelRequest', CancelRequest
83
+ register '$/solargraph/document', Extended::Document
84
+ register '$/solargraph/search', Extended::Search
85
+ register '$/solargraph/checkGemVersion', Extended::CheckGemVersion
86
+ register '$/solargraph/documentGems', Extended::DocumentGems
87
+ register '$/solargraph/downloadCore', Extended::DownloadCore
88
+ register '$/solargraph/environment', Extended::Environment
89
+ register 'shutdown', Shutdown
90
+ register 'exit', ExitNotification
91
91
  end
92
92
  end
93
93
  end
@@ -1,29 +1,40 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'open3'
4
- require 'shellwords'
3
+ require 'rubocop'
4
+ require 'securerandom'
5
5
 
6
6
  module Solargraph
7
7
  module LanguageServer
8
8
  module Message
9
9
  module TextDocument
10
10
  class Formatting < Base
11
+ include Solargraph::Diagnostics::RubocopHelpers
12
+
11
13
  def process
12
14
  filename = uri_to_file(params['textDocument']['uri'])
13
- filename = 'tmp.rb' if filename.nil? or filename.empty?
15
+ # Make the temp file in the original file's directory so RuboCop
16
+ # detects the correct configuration
17
+ tempfile = File.join(File.dirname(filename), "_tmp_#{SecureRandom.hex(8)}_#{File.basename(filename)}")
14
18
  original = host.read_text(params['textDocument']['uri'])
15
- cmd = "rubocop -a -f fi -s #{Shellwords.escape(filename)}"
16
- o, e, s = Open3.capture3(cmd, stdin_data: original)
17
- return format(original, o) if o && !o.empty?
18
- set_error(Solargraph::LanguageServer::ErrorCodes::INTERNAL_ERROR, e)
19
+ File.write tempfile, original
20
+ begin
21
+ options, paths = RuboCop::Options.new.parse(['-a', '-f', 'fi', tempfile])
22
+ redirect_stdout { RuboCop::Runner.new(options, RuboCop::ConfigStore.new).run(paths) }
23
+ result = File.read(tempfile)
24
+ File.unlink tempfile
25
+ format original, result
26
+ rescue RuboCop::ValidationError, RuboCop::ConfigNotFoundError => e
27
+ set_error(Solargraph::LanguageServer::ErrorCodes::INTERNAL_ERROR, "[#{e.class}] #{e.message}")
28
+ File.unlink tempfile
29
+ end
19
30
  end
20
31
 
32
+ private
33
+
34
+ # @param original [String]
35
+ # @param result [String]
36
+ # @return [void]
21
37
  def format original, result
22
- lines = result.lines
23
- index = lines.index{|l| l.start_with?('====================')}
24
- formatted = lines[index+1..-1].join
25
- # The response is required to send an explicit range. Text edits
26
- # with null ranges get ignored. See castwide/vscode-solargraph#83
27
38
  if original.end_with?("\n")
28
39
  ending = {
29
40
  line: original.lines.length,
@@ -45,7 +56,7 @@ module Solargraph
45
56
  },
46
57
  end: ending
47
58
  },
48
- newText: formatted
59
+ newText: result
49
60
  }
50
61
  ]
51
62
  )
@@ -19,7 +19,7 @@ module Solargraph
19
19
  if !this_link.nil? && this_link != last_link
20
20
  parts.push this_link
21
21
  end
22
- parts.push pin.detail unless pin.is_a?(Pin::Namespace) || pin.detail.nil?
22
+ parts.push pin.detail.gsub(':', '\\:') unless pin.is_a?(Pin::Namespace) || pin.detail.nil?
23
23
  parts.push pin.documentation unless pin.documentation.nil? or pin.documentation.empty?
24
24
  contents.push parts.join("\n\n") unless parts.empty?
25
25
  last_link = this_link unless this_link.nil?
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'json'
4
+
3
5
  module Solargraph
4
6
  module LanguageServer
5
7
  module Transport
@@ -3,7 +3,6 @@
3
3
  require 'ostruct'
4
4
  require 'tilt'
5
5
  require 'yard'
6
- require 'htmlentities'
7
6
  require 'cgi'
8
7
 
9
8
  module Solargraph
@@ -30,7 +29,7 @@ module Solargraph
30
29
  # @param text [String]
31
30
  # @return [String]
32
31
  def escape text
33
- HTMLEntities.new.encode(text)
32
+ CGI.escapeHTML(text)
34
33
  end
35
34
 
36
35
  # @param code [String]
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'yard'
4
+
3
5
  module Solargraph
4
6
  # The namespace for pins used in maps.
5
7
  #
@@ -237,7 +237,7 @@ module Solargraph
237
237
  # @return [void]
238
238
  def parse_comments
239
239
  # HACK: Avoid a NoMethodError on nil with empty overload tags
240
- if comments.empty? || comments.strip.end_with?('@overload')
240
+ if comments.nil? || comments.empty? || comments.strip.end_with?('@overload')
241
241
  @docstring = nil
242
242
  @directives = []
243
243
  else
@@ -1,25 +1,91 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'maruku'
4
+ require 'yard'
3
5
  require 'reverse_markdown'
6
+ require 'solargraph/converters/dl'
7
+ require 'solargraph/converters/dt'
8
+ require 'solargraph/converters/dd'
9
+ require 'solargraph/converters/misc'
10
+
11
+ # HACK: Setting :html_parser through `Maruku.new` does not work
12
+ MaRuKu::Globals[:html_parser] = 'nokogiri'
4
13
 
5
14
  module Solargraph
6
15
  module Pin
7
16
  # A module to add the Pin::Base#documentation method.
8
17
  #
9
18
  module Documenting
19
+ # A documentation formatter that either performs Markdown conversion for
20
+ # text, or applies backticks for code blocks.
21
+ #
22
+ class DocSection
23
+ # @return [String]
24
+ attr_reader :plaintext
25
+
26
+ # @param code [Boolean] True if this section is a code block
27
+ def initialize code
28
+ @plaintext = String.new('')
29
+ @code = code
30
+ end
31
+
32
+ def code?
33
+ @code
34
+ end
35
+
36
+ # @param text [String]
37
+ # @return [String]
38
+ def concat text
39
+ @plaintext.concat text
40
+ end
41
+
42
+ def to_s
43
+ return "\n```ruby\n#{@plaintext}#{@plaintext.end_with?("\n") ? '' : "\n"}```\n\n" if code?
44
+ ReverseMarkdown.convert unescape_brackets(Maruku.new(escape_brackets(@plaintext), on_error: :raise).to_html)
45
+ rescue MaRuKu::Exception
46
+ # Maruku exceptions usually indicate that the documentation is in
47
+ # RDoc syntax.
48
+ ReverseMarkdown.convert YARD::Templates::Helpers::Markup::RDocMarkup.new(@plaintext).to_html
49
+ end
50
+
51
+ private
52
+
53
+ # @param text [String]
54
+ # @return [String]
55
+ def escape_brackets text
56
+ text.gsub(/(\[[^\]]*\])([^\(]|\z)/, '!!!`\1`!!!\2')
57
+ end
58
+
59
+ # @param text [String]
60
+ # @return [String]
61
+ def unescape_brackets text
62
+ text.gsub('!!!`[', '[').gsub(']`!!!', ']')
63
+ end
64
+ end
65
+
10
66
  # @return [String]
11
67
  def documentation
12
68
  @documentation ||= begin
13
- indented = false
14
- normalize_indentation(docstring.to_s).gsub(/\t/, ' ').lines.map { |l|
15
- if l =~ /^ [^\s]/ || (l.start_with?(' ') && indented)
16
- indented = true
17
- " #{l}"
69
+ # Using DocSections allows for code blocks that start with an empty
70
+ # line and at least two spaces of indentation. This is a common
71
+ # convention in Ruby core documentation, e.g., String#split.
72
+ sections = [DocSection.new(false)]
73
+ normalize_indentation(docstring.to_s).gsub(/\t/, ' ').lines.each do |l|
74
+ if l.strip.empty?
75
+ sections.last.concat l
18
76
  else
19
- indented = false
20
- l # (was `unhtml l`)
77
+ if (l =~ /^ [^\s]/ && sections.last.plaintext =~ /(\r?\n[ \t]*?){2,}$/) || (l.start_with?(' ') && sections.last.code?)
78
+ # Code block
79
+ sections.push DocSection.new(true) unless sections.last.code?
80
+ sections.last.concat l[2..-1]
81
+ else
82
+ # Regular documentation
83
+ sections.push DocSection.new(false) if sections.last.code?
84
+ sections.last.concat l
85
+ end
21
86
  end
22
- }.join
87
+ end
88
+ sections.map(&:to_s).join
23
89
  end
24
90
  end
25
91
 
@@ -39,15 +105,6 @@ module Solargraph
39
105
  return line unless spaces.odd?
40
106
  line[1..-1]
41
107
  end
42
-
43
- # @todo This was tested as a simple way to convert some of the more
44
- # common markup in documentation to Markdown. We should still look
45
- # for a solution, but it'll have to be more robust than this.
46
- def unhtml text
47
- text.gsub(/\<\/?(code|tt)\>/, '`')
48
- .gsub(/\<\/?(em|i)\>/, '*')
49
- .gsub(/\<\/?(strong|b)\>/, '**')
50
- end
51
108
  end
52
109
  end
53
110
  end
@@ -76,7 +76,7 @@ module Solargraph
76
76
  name: name,
77
77
  closure: closure,
78
78
  args: tag.parameters.map(&:first),
79
- comments: tag.docstring.all
79
+ comments: tag.docstring.all.to_s
80
80
  )
81
81
  end
82
82
  end
@@ -11,7 +11,7 @@ module Solargraph
11
11
  @@gate_cache ||= {}
12
12
 
13
13
  def comments
14
- @comments ||= code_object.docstring ? code_object.docstring.all : ''
14
+ @comments ||= code_object.docstring ? code_object.docstring.all.to_s : ''
15
15
  end
16
16
 
17
17
  def location
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'thor'
4
- require 'backport'
5
- require 'benchmark'
6
4
 
7
5
  module Solargraph
8
6
  class Shell < Thor
@@ -20,6 +18,7 @@ module Solargraph
20
18
  option :host, type: :string, aliases: :h, desc: 'The server host', default: '127.0.0.1'
21
19
  option :port, type: :numeric, aliases: :p, desc: 'The server port', default: 7658
22
20
  def socket
21
+ require 'backport'
23
22
  port = options[:port]
24
23
  port = available_port if port.zero?
25
24
  Backport.run do
@@ -36,6 +35,7 @@ module Solargraph
36
35
 
37
36
  desc 'stdio', 'Run a Solargraph stdio server'
38
37
  def stdio
38
+ require 'backport'
39
39
  Backport.run do
40
40
  Signal.trap("INT") do
41
41
  Backport.stop
@@ -159,6 +159,7 @@ module Solargraph
159
159
  option :directory, type: :string, aliases: :d, desc: 'The workspace directory', default: '.'
160
160
  option :verbose, type: :boolean, aliases: :v, desc: 'Verbose output', default: false
161
161
  def scan
162
+ require 'benchmark'
162
163
  directory = File.realpath(options[:directory])
163
164
  api_map = nil
164
165
  time = Benchmark.measure {
@@ -55,21 +55,21 @@ module Solargraph
55
55
  def infer_literal_node_type node
56
56
  return nil unless node.is_a?(AST::Node)
57
57
  if node.type == :str || node.type == :dstr
58
- return 'String'
58
+ return '::String'
59
59
  elsif node.type == :array
60
- return 'Array'
60
+ return '::Array'
61
61
  elsif node.type == :hash
62
- return 'Hash'
62
+ return '::Hash'
63
63
  elsif node.type == :int
64
- return 'Integer'
64
+ return '::Integer'
65
65
  elsif node.type == :float
66
- return 'Float'
66
+ return '::Float'
67
67
  elsif node.type == :sym
68
- return 'Symbol'
68
+ return '::Symbol'
69
69
  elsif node.type == :regexp
70
- return 'Regexp'
70
+ return '::Regexp'
71
71
  elsif node.type == :irange
72
- return 'Range'
72
+ return '::Range'
73
73
  # @todo Support `nil` keyword in types
74
74
  # elsif node.type == :nil
75
75
  # return 'NilClass'
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'jaro_winkler'
4
+ require 'yard'
5
+ require 'yard-solargraph'
4
6
 
5
7
  module Solargraph
6
8
  # An index of pins and other ApiMap-related data for a Source.
@@ -104,7 +104,7 @@ module Solargraph
104
104
  gen_pin = Solargraph::SourceMap::NodeProcessor.process(src_node, region).first.last
105
105
  return if gen_pin.nil?
106
106
  # @todo: Smelly instance variable access
107
- gen_pin.instance_variable_set(:@comments, docstring.all)
107
+ gen_pin.instance_variable_set(:@comments, docstring.all.to_s)
108
108
  @pins.push gen_pin
109
109
  when 'attribute'
110
110
  return if directive.tag.name.nil?
@@ -115,7 +115,7 @@ module Solargraph
115
115
  location: location,
116
116
  closure: namespace,
117
117
  name: directive.tag.name,
118
- comments: docstring.all,
118
+ comments: docstring.all.to_s,
119
119
  access: :reader,
120
120
  scope: namespace.is_a?(Pin::Singleton) ? :class : :instance,
121
121
  visibility: :public
@@ -126,7 +126,7 @@ module Solargraph
126
126
  location: location,
127
127
  closure: namespace,
128
128
  name: "#{directive.tag.name}=",
129
- comments: docstring.all,
129
+ comments: docstring.all.to_s,
130
130
  access: :writer,
131
131
  scope: namespace.is_a?(Pin::Singleton) ? :class : :instance,
132
132
  visibility: :public
@@ -231,8 +231,15 @@ module Solargraph
231
231
  else
232
232
  argtype = arg.infer(api_map, block, locals)
233
233
  if !arg_to_duck(argtype, partype)
234
- if argtype.tag != partype.tag && !api_map.super_and_sub?(partype.tag.to_s, argtype.tag.to_s)
235
- result.push Problem.new(Solargraph::Location.new(filename, Solargraph::Range.from_node(node)), "Wrong parameter type for #{pin.path}: #{pin.parameter_names[index]} expected #{partype.tag}, received #{argtype.tag}")
234
+ match = false
235
+ partype.each do |pt|
236
+ if argtype.tag == pt.tag || api_map.super_and_sub?(pt.tag.to_s, argtype.tag.to_s)
237
+ match = true
238
+ break
239
+ end
240
+ end
241
+ unless match
242
+ result.push Problem.new(Solargraph::Location.new(filename, Solargraph::Range.from_node(node)), "Wrong parameter type for #{pin.path}: #{pin.parameter_names[index]} expected [#{partype}], received [#{argtype.tag}]")
236
243
  end
237
244
  end
238
245
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Solargraph
4
- VERSION = '0.37.2'
4
+ VERSION = '0.38.0'
5
5
  end
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'yard'
4
+ require 'yard-solargraph'
5
+ require 'rubygems/package'
4
6
 
5
7
  module Solargraph
6
8
  # The YardMap provides access to YARD documentation for the Ruby core, the
@@ -18,7 +20,7 @@ module Solargraph
18
20
  @@stdlib_paths = {}
19
21
  YARD::Registry.load! @@stdlib_yardoc
20
22
  YARD::Registry.all(:class, :module).each do |ns|
21
- next if ns.file.nil?
23
+ next if ns.nil? || ns.file.nil?
22
24
  path = ns.file.sub(/^(ext|lib)\//, '').sub(/\.(rb|c)$/, '')
23
25
  next if path.start_with?('-')
24
26
  @@stdlib_paths[path] ||= []
@@ -291,3 +293,7 @@ module Solargraph
291
293
  end
292
294
  end
293
295
  end
296
+
297
+ Solargraph::YardMap::CoreDocs.require_minimum
298
+ # Change YARD log IO to avoid sending unexpected messages to STDOUT
299
+ YARD::Logger.instance.io = File.new(File::NULL, 'w')
@@ -21,8 +21,8 @@ Gem::Specification.new do |s|
21
21
 
22
22
  s.add_runtime_dependency 'backport', '~> 1.1'
23
23
  s.add_runtime_dependency 'bundler', '>= 1.17.2'
24
- s.add_runtime_dependency 'htmlentities', '~> 4.3', '>= 4.3.4'
25
24
  s.add_runtime_dependency 'jaro_winkler', '~> 1.5'
25
+ s.add_runtime_dependency 'maruku', '~> 0.7', '>= 0.7.3'
26
26
  s.add_runtime_dependency 'nokogiri', '~> 1.9', '>= 1.9.1'
27
27
  s.add_runtime_dependency 'parser', '~> 2.3'
28
28
  s.add_runtime_dependency 'reverse_markdown', '~> 1.0', '>= 1.0.5'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solargraph
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.37.2
4
+ version: 0.38.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fred Snyder
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-26 00:00:00.000000000 Z
11
+ date: 2019-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backport
@@ -39,39 +39,39 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.17.2
41
41
  - !ruby/object:Gem::Dependency
42
- name: htmlentities
42
+ name: jaro_winkler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '4.3'
48
- - - ">="
49
- - !ruby/object:Gem::Version
50
- version: 4.3.4
47
+ version: '1.5'
51
48
  type: :runtime
52
49
  prerelease: false
53
50
  version_requirements: !ruby/object:Gem::Requirement
54
51
  requirements:
55
52
  - - "~>"
56
53
  - !ruby/object:Gem::Version
57
- version: '4.3'
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: 4.3.4
54
+ version: '1.5'
61
55
  - !ruby/object:Gem::Dependency
62
- name: jaro_winkler
56
+ name: maruku
63
57
  requirement: !ruby/object:Gem::Requirement
64
58
  requirements:
65
59
  - - "~>"
66
60
  - !ruby/object:Gem::Version
67
- version: '1.5'
61
+ version: '0.7'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 0.7.3
68
65
  type: :runtime
69
66
  prerelease: false
70
67
  version_requirements: !ruby/object:Gem::Requirement
71
68
  requirements:
72
69
  - - "~>"
73
70
  - !ruby/object:Gem::Version
74
- version: '1.5'
71
+ version: '0.7'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 0.7.3
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: nokogiri
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -283,6 +283,10 @@ files:
283
283
  - lib/solargraph/convention/gemfile.rb
284
284
  - lib/solargraph/convention/gemspec.rb
285
285
  - lib/solargraph/convention/rspec.rb
286
+ - lib/solargraph/converters/dd.rb
287
+ - lib/solargraph/converters/dl.rb
288
+ - lib/solargraph/converters/dt.rb
289
+ - lib/solargraph/converters/misc.rb
286
290
  - lib/solargraph/core_fills.rb
287
291
  - lib/solargraph/diagnostics.rb
288
292
  - lib/solargraph/diagnostics/base.rb