Class: Spoom::Sorbet::Config

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

Overview

Parse Sorbet config files

Parses a Sorbet config file:

“‘ruby config = Spoom::Sorbet::Config.parse_file(“sorbet/config”) puts config.paths # “.” “`

Parses a Sorbet config string:

“‘ruby config = Spoom::Sorbet::Config.parse_string(<<~CONFIG)

a
--file=b
--ignore=c

CONFIG puts config.paths # “a”, “b” puts config.ignore # “c” “‘

Constant Summary collapse

DEFAULT_ALLOWED_EXTENSIONS =

: Array

[".rb", ".rbi"].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfig

: -> void



36
37
38
39
40
41
# File 'lib/spoom/sorbet/config.rb', line 36

def initialize
  @paths = [] #: Array[String]
  @ignore = [] #: Array[String]
  @allowed_extensions = [] #: Array[String]
  @no_stdlib = false #: bool
end

Instance Attribute Details

#allowed_extensionsObject

: Array



30
31
32
# File 'lib/spoom/sorbet/config.rb', line 30

def allowed_extensions
  @allowed_extensions
end

#ignoreObject

: Array



30
31
32
# File 'lib/spoom/sorbet/config.rb', line 30

def ignore
  @ignore
end

#no_stdlibObject

: bool



33
34
35
# File 'lib/spoom/sorbet/config.rb', line 33

def no_stdlib
  @no_stdlib
end

#pathsObject

: Array



30
31
32
# File 'lib/spoom/sorbet/config.rb', line 30

def paths
  @paths
end

Class Method Details

.parse_file(sorbet_config_path) ⇒ Object

: (String sorbet_config_path) -> Spoom::Sorbet::Config



77
78
79
# File 'lib/spoom/sorbet/config.rb', line 77

def parse_file(sorbet_config_path)
  parse_string(File.read(sorbet_config_path))
end

.parse_string(sorbet_config) ⇒ Object

: (String sorbet_config) -> Spoom::Sorbet::Config



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/spoom/sorbet/config.rb', line 82

def parse_string(sorbet_config)
  config = Config.new
  state = nil #: Symbol?
  sorbet_config.each_line do |line|
    line = line.strip
    case line
    when /^--allowed-extension$/
      state = :extension
      next
    when /^--allowed-extension=/
      config.allowed_extensions << parse_option(line)
      next
    when /^--ignore$/
      state = :ignore
      next
    when /^--ignore=/
      config.ignore << parse_option(line)
      next
    when /^--file$/
      next
    when /^--file=/
      config.paths << parse_option(line)
      next
    when /^--dir$/
      next
    when /^--dir=/
      config.paths << parse_option(line)
      next
    when /^--no-stdlib$/
      config.no_stdlib = true
      next
    when /^--.*=/
      next
    when /^--/
      state = :skip
    when /^-.*=?/
      next
    when /^#/
      next
    when /^$/
      next
    else
      case state
      when :ignore
        config.ignore << line
      when :extension
        config.allowed_extensions << line
      when :skip
        # nothing
      else
        config.paths << line
      end
      state = nil
    end
  end
  config
end

Instance Method Details

#copyObject

: -> Config



44
45
46
47
48
49
50
51
# File 'lib/spoom/sorbet/config.rb', line 44

def copy
  new_config = Sorbet::Config.new
  new_config.paths.concat(@paths)
  new_config.ignore.concat(@ignore)
  new_config.allowed_extensions.concat(@allowed_extensions)
  new_config.no_stdlib = @no_stdlib
  new_config
end

#options_stringObject

Returns self as a string of options that can be passed to Sorbet

Example: ~~~rb config = Sorbet::Config.new config.paths << “/foo” config.paths << “/bar” config.ignore << “/baz” config.allowed_extensions << “.rb”

puts config.options_string # “/foo /bar –ignore /baz –allowed-extension .rb” ~~~ : -> String



66
67
68
69
70
71
72
73
# File 'lib/spoom/sorbet/config.rb', line 66

def options_string
  opts = []
  opts.concat(paths.map { |p| "'#{p}'" })
  opts.concat(ignore.map { |p| "--ignore '#{p}'" })
  opts.concat(allowed_extensions.map { |ext| "--allowed-extension '#{ext}'" })
  opts << "--no-stdlib" if @no_stdlib
  opts.join(" ")
end