-
Notifications
You must be signed in to change notification settings - Fork 30
/
kwsCheckComma.cxx
109 lines (94 loc) · 3.17 KB
/
kwsCheckComma.cxx
1
2
3
4
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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
/*=========================================================================
Program: KWStyle - Kitware Style Checker
Module: kwsCheckComma.cxx
Copyright (c) Kitware, Inc. All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#include "kwsParser.h"
#include <string.h> // strlen
namespace kws {
/** Check the number of spaces after the if keyword */
bool Parser::CheckComma( unsigned int before, unsigned int after )
{
m_TestsDone[COMMA] = true;
m_TestsDescription[COMMA] =
"Number of spaces for , should be:";
constexpr size_t length = 200;
char* val = new char[length];
snprintf(val,length," before = %d",before);
m_TestsDescription[COMMA] += val;
snprintf(val,length," : after = %d",after);
m_TestsDescription[COMMA] += val;
delete [] val;
bool hasErrors = false;
long int prevOperatorPos = 0;
size_t operatorPos = m_BufferNoComment.find(",", prevOperatorPos);
while(operatorPos != std::string::npos)
{
// Check number of space before
unsigned int bfr = 0;
auto i = static_cast<long int>(operatorPos);
while( i>0 && m_BufferNoComment[i-1] == ' ' )
{
++bfr;
--i;
}
// Check number of space after
unsigned int aft = 0;
i = static_cast<long int>( operatorPos+1 );
while( i<(long int)m_BufferNoComment.size()
&& m_BufferNoComment[i] == ' ' )
{
aft++;
i++;
}
if( i<(long int)m_BufferNoComment.size()
&& ( m_BufferNoComment[i] == '\n' ||
m_BufferNoComment[i] == '\r' ||
m_BufferNoComment[i] == '\\' ) )
{
aft = after;
}
if( bfr != before || aft != after )
{
if( !this->IsBetweenQuote(operatorPos,false) )
{
Error error;
error.line = this->GetLineNumber(operatorPos,true);
error.line2 = error.line;
error.number = COMMA;
error.description = "Spaces before , = ";
constexpr size_t length = 200;
char* errorVal = new char[length];
snprintf(errorVal,length,"%d",bfr);
error.description += errorVal;
error.description += " v.s ";
snprintf(errorVal,length,"%d",before);
error.description += errorVal;
error.description += " : Spaces after , = ";
snprintf(errorVal,length,"%d",aft);
error.description += errorVal;
error.description += " v.s ";
snprintf(errorVal,length,"%d",after);
error.description += errorVal;
m_ErrorList.push_back(error);
delete [] errorVal;
hasErrors = true;
}
}
prevOperatorPos = static_cast<long int>(operatorPos)+1;
if( prevOperatorPos < (long int)( m_BufferNoComment.size() )-1 )
{
operatorPos = m_BufferNoComment.find(",", prevOperatorPos);
}
else
{
operatorPos = std::string::npos;
}
}
return !hasErrors;
}
} // end namespace kws