def _check_open_paren_new_line(self, oToi): if self.open_paren_new_line == 'ignore': return iLine, lTokens = utils.get_toi_parameters(oToi) bSearch = False bAssignmentFound = False bOthersClause = False iToken = _find_assignment_operator(lTokens) + 1 iStopIndex = len(lTokens) bFirstParenFound = False while iToken < iStopIndex: if bFirstParenFound: iToken, bOthersClause = _classify_others(iToken, lTokens) if bOthersClause: iToken += 1 continue iToken, bAssignmentFound = _classify_assignment(iToken, lTokens) if bAssignmentFound: iToken += 1 continue oToken = lTokens[iToken] if isinstance(oToken, parser.open_parenthesis): bFirstParenFound = True if utils.is_token_at_end_of_line(iToken, lTokens): if self.open_paren_new_line == 'no': iEnd = utils.find_next_non_whitespace_token( iToken + 1, lTokens) iErrorLine = rule_utils.number_of_carriage_returns( lTokens[:iToken]) + iLine sSolution = 'Remove carriage return after open parenthesis.' oViolation = _create_violation(oToi, iErrorLine, iToken, iEnd, 'open_paren_new_line', 'remove', sSolution) self.add_violation(oViolation) else: if self.open_paren_new_line == 'yes': sSolution = 'Add carriage return after open parenthesis.' iErrorLine = rule_utils.number_of_carriage_returns( lTokens[:iToken]) + iLine oViolation = _create_violation(oToi, iErrorLine, iToken, iToken, 'open_paren_new_line', 'insert', sSolution) self.add_violation(oViolation) bOthersClause = False iToken += 1 return None
def _check_assign_on_single_line(self, oToi): if self.assign_on_single_line == 'ignore': return iLine, lTokens = utils.get_toi_parameters(oToi) bSearch = False iOpenParen = 0 iCloseParen = 0 bAssignmentFound = False bOthersClause = False iToken = _find_assignment_operator(lTokens) + 1 iStopIndex = len(lTokens) bFirstParenFound = False while iToken < iStopIndex: if bFirstParenFound: iToken, bOthersClause = _classify_others(iToken, lTokens) if bOthersClause: iToken += 1 continue if lTokens[iToken].get_value() == '=>': iPreviousToken = utils.find_previous_non_whitespace_token( iToken - 1, lTokens) iToken, bAssignmentFound = _classify_assignment(iToken, lTokens) if bAssignmentFound: # rule_utils.print_debug(lTokens[iPreviousToken:iToken + 1]) if rule_utils.number_of_carriage_returns( lTokens[iPreviousToken:iToken]) > 0: iErrorLine = rule_utils.number_of_carriage_returns( lTokens[:iPreviousToken]) + iLine sSolution = 'Remove carriage returns for assignments.' oViolation = _create_violation(oToi, iErrorLine, iPreviousToken, iToken, 'assign_on_single_line', 'remove', sSolution) self.add_violation(oViolation) oToken = lTokens[iToken] if isinstance(oToken, parser.open_parenthesis): bFirstParenFound = True iToken += 1 return None
def _check_close_paren_new_line(self, oToi): if self.close_paren_new_line == 'ignore': return iLine, lTokens = utils.get_toi_parameters(oToi) bAssignmentFound = False bOthersClause = False iToken = _find_assignment_operator(lTokens) + 1 iStopIndex = _find_last_closing_paren(lTokens) bFirstParenFound = False while iToken < iStopIndex: if bFirstParenFound: iToken, bOthersClause = _classify_others(iToken, lTokens) if bOthersClause: iToken += 1 continue iToken, bAssignmentFound = _classify_assignment(iToken, lTokens) if bAssignmentFound: iToken += 1 continue oToken = lTokens[iToken] if isinstance(oToken, parser.open_parenthesis): bFirstParenFound = True if isinstance(oToken, parser.close_parenthesis): if utils.does_token_start_line(iToken, lTokens): if self.close_paren_new_line == 'no': iStart = utils.find_previous_non_whitespace_token( iToken - 1, lTokens) iErrorLine = rules_utils.number_of_carriage_returns( lTokens[:iToken]) + iLine sSolution = 'Move closing parenthesis to previous line.' oViolation = _create_violation(oToi, iErrorLine, iStart, iToken, 'close_paren_new_line', 'remove', sSolution) self.add_violation(oViolation) else: if self.close_paren_new_line == 'yes': iStart = iToken - 1 iErrorLine = rules_utils.number_of_carriage_returns( lTokens[:iToken]) + iLine sSolution = 'Move closing parenthesis to the next line.' oViolation = _create_violation(oToi, iErrorLine, iStart, iToken, 'close_paren_new_line', 'insert', sSolution) self.add_violation(oViolation) iToken += 1 return None