Class: DartAnalyzeParser

Inherits:
Object
  • Object
show all
Defined in:
lib/dart_linter/dart_analyze_parser.rb

Class Method Summary collapse

Class Method Details

.violations(input) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/dart_linter/dart_analyze_parser.rb', line 5

def violations(input)
  filtered_input = filter_input(input)

  return [] if filtered_input.detect { |element| element.include? "No issues found!" }

  # Check if the line starts with error, warning or info
  level_pattern = /^(?:error|warning|info)/
  issues = filtered_input.select { |line| line.match?(level_pattern) }

  separator = issues.first.include?("") ? "" : " - "
  first_issue_parts = issues.first.split(separator)
  unless first_issue_parts.length >= 4
    raise "Unknown issue format. Please check the report file.\n#{issues.first}"
  end

  # Dart analyze format: level • file:line • description • rule
  # Flutter analyze format: level - description - file:line - rule
  is_dart_analyze    = first_issue_parts[1].match?(/\.dart:\d+:\d+/) || false
  is_flutter_analyze = first_issue_parts[2].match?(/\.dart:\d+:\d+/) || false

  unless is_dart_analyze || is_flutter_analyze
    raise "Unknown report format. Please check the report file.\n#{issues.first}"
  end

  issues.map { |line| parse_line(line, separator, is_dart_analyze) }
end