diff --git a/lib/xcpretty/formatters/formatter.rb b/lib/xcpretty/formatters/formatter.rb index 696a142b..ca972eca 100644 --- a/lib/xcpretty/formatters/formatter.rb +++ b/lib/xcpretty/formatters/formatter.rb @@ -56,7 +56,7 @@ def format_compile_error(file_name, file_path, reason, def format_error(message); EMPTY; end def format_file_missing_error(error, file_path); EMPTY; end def format_ld_warning(message); EMPTY; end - def format_undefined_symbols(message, symbol, reference); EMPTY; end + def format_undefined_symbols(message, infos); EMPTY; end def format_duplicate_symbols(message, file_paths); EMPTY; end def format_warning(message); message; end @@ -137,10 +137,16 @@ def format_ld_warning(reason) "#{yellow(warning_symbol + ' ' + reason)}" end - def format_undefined_symbols(message, symbol, reference) - "\n#{red(error_symbol + " " + message)}\n" \ - "> Symbol: #{symbol}\n" \ - "> Referenced from: #{reference}\n\n" + def format_undefined_symbols(message, infos) + msg = "\n#{red(error_symbol + " " + message)}\n" + infos.each do |info| + msg = "#{msg}> Symbol: #{info[:symbol]}\n" + info[:references].each do |reference| + msg = "#{msg}> Referenced from: #{reference}\n" + end + msg = "#{msg}\n" + end + msg end def format_duplicate_symbols(message, file_paths) diff --git a/lib/xcpretty/parser.rb b/lib/xcpretty/parser.rb index b9873208..9fc2e4df 100644 --- a/lib/xcpretty/parser.rb +++ b/lib/xcpretty/parser.rb @@ -244,7 +244,7 @@ module Errors # @regex Captured groups # $1 symbol location - LINKER_UNDEFINED_SYMBOL_LOCATION_MATCHER = /^(.* in .*\.o)$/ + LINKER_UNDEFINED_SYMBOL_LOCATION_MATCHER = /^(.* in .*\.o[\)]?)$/ # @regex Captured groups # $1 reason @@ -279,7 +279,6 @@ def parse(text) return format_compile_error if should_format_error? return format_compile_warning if should_format_warning? - return format_undefined_symbols if should_format_undefined_symbols? return format_duplicate_symbols if should_format_duplicate_symbols? case text @@ -334,7 +333,7 @@ def parse(text) when LD_WARNING_MATCHER formatter.format_ld_warning($1 + $2) when LD_ERROR_MATCHER - formatter.format_error($1) + format_undefined_symbols($1) if should_format_undefined_symbols? when LIBTOOL_MATCHER formatter.format_libtool($1) when LINKING_MATCHER @@ -430,9 +429,10 @@ def update_linker_failure_state(text) case text when SYMBOL_REFERENCED_FROM_MATCHER - current_linker_failure[:symbol] = $1 + info = {symbol: $1 , references: []} + current_linker_failure[:infos] << info when LINKER_UNDEFINED_SYMBOL_LOCATION_MATCHER - current_linker_failure[:reference] = text.strip + current_linker_failure[:infos][-1][:references] << text.strip when LINKER_DUPLICATE_SYMBOLS_LOCATION_MATCHER current_linker_failure[:files] << $1 end @@ -452,7 +452,7 @@ def error_or_warning_is_present end def should_format_undefined_symbols? - current_linker_failure[:message] && current_linker_failure[:symbol] && current_linker_failure[:reference] + current_linker_failure[:message] && current_linker_failure[:infos].count > 1 end def should_format_duplicate_symbols? @@ -464,7 +464,7 @@ def current_issue end def current_linker_failure - @linker_failure ||= {files: []} + @linker_failure ||= {files: [], infos: []} end def format_compile_error @@ -489,12 +489,12 @@ def format_compile_warning warning[:cursor]) end - def format_undefined_symbols + def format_undefined_symbols(ld_error) result = formatter.format_undefined_symbols( current_linker_failure[:message], - current_linker_failure[:symbol], - current_linker_failure[:reference] + current_linker_failure[:infos] ) + result += formatter.format_error(ld_error) reset_linker_format_state result end