forked from qt-creator/qt-creator
		
	GPL-3.0 is deprecated by SPDX.
Change done by
 find . -type f -exec perl -pi -e 's/LicenseRef-Qt-Commercial OR GPL-3.0(?!-)/LicenseRef-Qt-Commercial OR GPL-3.0-only/g' {} \;
Change-Id: If316a498e3f27d2030b86d4e7743b3237ce09939
Reviewed-by: Lucie Gerard <lucie.gerard@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
		
	
		
			
				
	
	
		
			101 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl -w
 | |
| 
 | |
| # Copyright (C) 2016 The Qt Company Ltd.
 | |
| # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
 | |
| 
 | |
| =head1 NAME
 | |
| 
 | |
| msanalyzer2tasks.pl - Convert MSVC/Static analyzer warnings and errors into Qt Creator task files.
 | |
| 
 | |
| =head1 SYNOPSIS
 | |
| 
 | |
|     msanalyzer2tasks.pl < logfile > taskfile
 | |
| 
 | |
| =cut
 | |
| 
 | |
| # Sample:
 | |
| # <DEFECTS>
 | |
| #  <DEFECT>
 | |
| #    <SFA>
 | |
| #      <FILEPATH>c:\dev\qt5\qtbase\src\corelib\statemachine\</FILEPATH>
 | |
| #      <FILENAME>qstatemachine.cpp</FILENAME>
 | |
| #      <LINE>968</LINE>
 | |
| #      <COLUMN>21</COLUMN>
 | |
| #    </SFA>
 | |
| #    <DEFECTCODE>6246</DEFECTCODE>
 | |
| #    <DESCRIPTION>Local declaration of 'i' hides declaration of the same name in outer scope. For additional information, see previous declaration at line '953' of 'c:\dev\qt5\qtbase\src\corelib\statemachine\qstatemachine.cpp'.</DESCRIPTION>
 | |
| #    <FUNCTION>QStateMachinePrivate::enterStates</FUNCTION>
 | |
| #    <DECORATED>?enterStates@QStateMachinePrivate@@UAEXPAVQEvent@@ABV?$QList@PAVQAbstractState@@@@1ABV?$QSet@PAVQAbstractState@@@@AAV?$QHash@PAVQAbstractState@@V?$QVector@UQPropertyAssignment@@@@@@ABV?$QList@PAVQAbstractAnimation@@@@@Z</DECORATED>
 | |
| #    <FUNCLINE>941</FUNCLINE>
 | |
| #    <PATH>
 | |
| #      <SFA>
 | |
| #        <FILEPATH>c:\dev\qt5\qtbase\src\corelib\statemachine\</FILEPATH>
 | |
| #        <FILENAME>qstatemachine.cpp</FILENAME>
 | |
| #        <LINE>953</LINE>
 | |
| #        <COLUMN>18</COLUMN>
 | |
| #      </SFA>
 | |
| #    </PATH>
 | |
| #  </DEFECT>
 | |
| #  <DEFECT>
 | |
| 
 | |
| use strict;
 | |
| 
 | |
| my ($description, $defectCode);
 | |
| my (@filePaths, @fileNames, @lineNumbers);
 | |
| 
 | |
| # Return element contents of a line "<ELEMENT>Contents</ELEMENT>"
 | |
| sub elementContents
 | |
| {
 | |
|     my ($line) = @_;
 | |
|     return $line =~ /^ *<([^>]*)>([^<]*)<\/.*$/
 | |
|         ? ($1, $2) : (undef, undef)
 | |
| }
 | |
| 
 | |
| # Fix path 'c:\foo\' -> 'c:/foo'
 | |
| sub fixFilePath
 | |
| {
 | |
|     my ($p) = @_;
 | |
|     $p =~ s|\\|/|g;
 | |
|     my $lastSlash = rindex($p, '/');
 | |
|     chop($p) if $lastSlash  == length($p) - 1;
 | |
|     return $p;
 | |
| }
 | |
| 
 | |
| # Fix message (replace XML entities, backslash)
 | |
| sub fixMessage
 | |
| {
 | |
|     my ($m) = @_;
 | |
|     $m =~ s|\\|/|g;
 | |
|     $m =~ s/</</g;
 | |
|     $m =~ s/>/>/g;
 | |
|     $m =~ s/&/&/g;
 | |
|     return $m;
 | |
| }
 | |
| 
 | |
| while (my $line = <STDIN> ) {
 | |
|     chomp($line);
 | |
|     my ($element, $content) = elementContents($line);
 | |
|     if (defined($element)) {
 | |
|         if ($element eq 'FILEPATH') {
 | |
|             push(@filePaths, fixFilePath($content));
 | |
|         } elsif ($element eq 'FILENAME') {
 | |
|             push(@fileNames, $content);
 | |
|         } elsif ($element eq 'LINE') {
 | |
|             push(@lineNumbers, $content);
 | |
|         } elsif ($element eq 'DESCRIPTION') {
 | |
|             $description = fixMessage($content);
 | |
|         } elsif ($element eq 'DEFECTCODE') {
 | |
|             $defectCode = $content;
 | |
|         }
 | |
|     } elsif (index($line, '</DEFECT>') >= 0) {
 | |
|         my $count = scalar(@filePaths);
 | |
|         for (my $i = 0; $i < $count; $i++) {
 | |
|             my $text = $description;
 | |
|             $text .= ' (' . $defectCode . ')' if defined $defectCode;
 | |
|             print $filePaths[$i], '/', $fileNames[$i], "\t", $lineNumbers[$i], "\twarn\t",  $text,"\n";
 | |
|         }
 | |
|         $description =  $defectCode = undef;
 | |
|         @filePaths = @fileNames= @lineNumbers = ();
 | |
|     }
 | |
| }
 |