Module: XMP2Assert::Classifier

Defined in:
lib/xmp2assert/classifier.rb

Overview

Usually, you want to check LOTS of files that may or may not contain xmp comments at once, maybe from inside of a CI process. That's OK but we want to speed things up, so here we filter out files that are not necessary to convert.

Typical usage:

Pathname.glob('**/*.rb').select do |f|
  XMP2Assert::Classifier.classify(f)
end

Class Method Summary collapse

Class Method Details

.classify(obj, file = nil, line = nil) ⇒ <Symbol>

Note:

syntax error results in empty return value.

Returns any combination of :=>, :>>, :!>, :~>, or empty.

Returns:

  • (<Symbol>)

    any combination of :=>, :>>, :!>, :~>, or empty.



46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/xmp2assert/classifier.rb', line 46

def self.classify obj, file = nil, line = nil
  parser = XMP2Assert::Parser.new obj, file, line
rescue SyntaxError
  return []
else
  mid = %i[=> >> !> ~>]
  return parser                                      \
    .tokens                                          \
    .map(&:to_sym)                                   \
    .sort                                            \
    .uniq                                            \
    .map {|i| case i when *mid then i else nil end } \
    .compact
end