12da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#!/usr/bin/env python 22da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# 32da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Copyright 2007 The Closure Linter Authors. All Rights Reserved. 42da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# 52da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Licensed under the Apache License, Version 2.0 (the "License"); 62da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# you may not use this file except in compliance with the License. 72da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# You may obtain a copy of the License at 82da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# 92da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# http://www.apache.org/licenses/LICENSE-2.0 102da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# 112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Unless required by applicable law or agreed to in writing, software 122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# distributed under the License is distributed on an "AS-IS" BASIS, 132da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# See the License for the specific language governing permissions and 152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# limitations under the License. 162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis"""Error object commonly used in linters.""" 182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis__author__ = ('robbyw@google.com (Robert Walker)', 202da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'ajp@google.com (Andy Perelson)') 212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 232da489cd246702bee5938545b18a6f710ed214bcJamie Gennisclass Error(object): 242da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Object representing a style error.""" 252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def __init__(self, code, message, token, position, fix_data): 272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Initialize the error object. 282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis Args: 302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis code: The numeric error code. 312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis message: The error message string. 322da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token: The tokens.Token where the error occurred. 332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis position: The position of the error within the token. 342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis fix_data: Data to be used in autofixing. Codes with fix_data are: 352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis GOOG_REQUIRES_NOT_ALPHABETIZED - List of string value tokens that are 362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis class names in goog.requires calls. 372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """ 382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.code = code 392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.message = message 402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.token = token 412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.position = position 422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis if token: 432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.start_index = token.start_index 442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis else: 452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.start_index = 0 462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.fix_data = fix_data 472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis if self.position: 482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.start_index += self.position.start 492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def Compare(a, b): 512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Compare two error objects, by source code order. 522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis Args: 542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis a: First error object. 552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis b: Second error object. 562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis Returns: 582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis A Negative/0/Positive number when a is before/the same as/after b. 592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """ 602da489cd246702bee5938545b18a6f710ed214bcJamie Gennis line_diff = a.token.line_number - b.token.line_number 612da489cd246702bee5938545b18a6f710ed214bcJamie Gennis if line_diff: 622da489cd246702bee5938545b18a6f710ed214bcJamie Gennis return line_diff 632da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 642da489cd246702bee5938545b18a6f710ed214bcJamie Gennis return a.start_index - b.start_index 652da489cd246702bee5938545b18a6f710ed214bcJamie Gennis Compare = staticmethod(Compare) 66