Class: Spoom::Sorbet::Sigs

Inherits:
Object
  • Object
show all
Defined in:
lib/spoom/sorbet/sigs.rb

Defined Under Namespace

Classes: Error, RBIToRBSTranslator, RBSToRBITranslator, Scanner, SigsLocator

Class Method Summary collapse

Class Method Details

.rbi_to_rbs(ruby_contents) ⇒ Object

: (String ruby_contents) -> String



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/spoom/sorbet/sigs.rb', line 24

def rbi_to_rbs(ruby_contents)
  ruby_contents = ruby_contents.dup
  sigs = collect_sorbet_sigs(ruby_contents)

  sigs.each do |sig, node|
    scanner = Scanner.new(ruby_contents)
    start_index = scanner.find_char_position(
      T.must(sig.loc&.begin_line&.pred),
      T.must(sig.loc).begin_column,
    )
    end_index = scanner.find_char_position(
      sig.loc&.end_line&.pred,
      T.must(sig.loc).end_column,
    )
    ruby_contents[start_index...end_index] = RBIToRBSTranslator.translate(sig, node)
  end

  ruby_contents
end

.rbs_to_rbi(ruby_contents) ⇒ Object

: (String ruby_contents) -> String



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/spoom/sorbet/sigs.rb', line 45

def rbs_to_rbi(ruby_contents)
  ruby_contents = ruby_contents.dup
  rbs_comments = collect_rbs_comments(ruby_contents)

  rbs_comments.each do |rbs_comment, node|
    scanner = Scanner.new(ruby_contents)
    start_index = scanner.find_char_position(
      T.must(rbs_comment.loc&.begin_line&.pred),
      T.must(rbs_comment.loc).begin_column,
    )
    end_index = scanner.find_char_position(
      rbs_comment.loc&.end_line&.pred,
      T.must(rbs_comment.loc).end_column,
    )
    ruby_contents[start_index...end_index] = RBSToRBITranslator.translate(rbs_comment, node)
  end

  ruby_contents
end

.strip(ruby_contents) ⇒ Object

: (String ruby_contents) -> String



12
13
14
15
16
17
18
19
20
21
# File 'lib/spoom/sorbet/sigs.rb', line 12

def strip(ruby_contents)
  sigs = collect_sorbet_sigs(ruby_contents)
  lines_to_strip = sigs.flat_map { |sig, _| (sig.loc&.begin_line..sig.loc&.end_line).to_a }

  lines = []
  ruby_contents.lines.each_with_index do |line, index|
    lines << line unless lines_to_strip.include?(index + 1)
  end
  lines.join
end