Class: Spoom::Sorbet::Config

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
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” “‘

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfig

Returns a new instance of Config.



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

def initialize
  @paths = T.let([], T::Array[String])
  @ignore = T.let([], T::Array[String])
  @allowed_extensions = T.let([], T::Array[String])
  @no_stdlib = T.let(false, T::Boolean)
end

Instance Attribute Details

#allowed_extensionsObject (readonly)

Returns the value of attribute allowed_extensions.



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

def allowed_extensions
  @allowed_extensions
end

#ignoreObject (readonly)

Returns the value of attribute ignore.



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

def ignore
  @ignore
end

#no_stdlibObject

Returns the value of attribute no_stdlib.



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

def no_stdlib
  @no_stdlib
end

#pathsObject (readonly)

Returns the value of attribute paths.



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

def paths
  @paths
end

Class Method Details

.parse_file(sorbet_config_path) ⇒ Object



79
80
81
# File 'lib/spoom/sorbet/config.rb', line 79

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

.parse_string(sorbet_config) ⇒ Object



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
139
140
141
142
143
# File 'lib/spoom/sorbet/config.rb', line 84

def parse_string(sorbet_config)
  config = Config.new
  state = T.let(nil, T.nilable(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=/
      config.ignore << 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



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



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

def options_string
  opts = []
  opts.concat(paths)
  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