15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright 2010 The Closure Linter Authors. All Rights Reserved. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Licensed under the Apache License, Version 2.0 (the "License"); 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# you may not use this file except in compliance with the License. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# You may obtain a copy of the License at 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# http://www.apache.org/licenses/LICENSE-2.0 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Unless required by applicable law or agreed to in writing, software 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# distributed under the License is distributed on an "AS-IS" BASIS, 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# See the License for the specific language governing permissions and 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# limitations under the License. 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""Linter error rules class for Closure Linter.""" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)__author__ = 'robbyw@google.com (Robert Walker)' 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import gflags as flags 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from closure_linter import errors 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FLAGS = flags.FLAGS 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)flags.DEFINE_boolean('jsdoc', True, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'Whether to report errors for missing JsDoc.') 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)flags.DEFINE_list('disable', None, 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'Disable specific error. Usage Ex.: gjslint --disable 1,' 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) '0011 foo.js.') 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)flags.DEFINE_integer('max_line_length', 80, 'Maximum line length allowed ' 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'without warning.', lower_bound=1) 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)disabled_error_nums = None 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)def GetMaxLineLength(): 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) """Returns allowed maximum length of line. 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Returns: 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Length of line allowed without any warning. 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) """ 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return FLAGS.max_line_length 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def ShouldReportError(error): 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Whether the given error should be reported. 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Returns: 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) True for all errors except missing documentation errors and disabled 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) errors. For missing documentation, it returns the value of the 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) jsdoc flag. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) global disabled_error_nums 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if disabled_error_nums is None: 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) disabled_error_nums = [] 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if FLAGS.disable: 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for error_str in FLAGS.disable: 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) error_num = 0 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) try: 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) error_num = int(error_str) 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) except ValueError: 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) pass 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) disabled_error_nums.append(error_num) 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ((FLAGS.jsdoc or error not in ( 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.MISSING_PARAMETER_DOCUMENTATION, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.MISSING_RETURN_DOCUMENTATION, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.MISSING_MEMBER_DOCUMENTATION, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.MISSING_PRIVATE, 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) errors.MISSING_JSDOC_TAG_THIS)) and 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (not FLAGS.disable or error not in disabled_error_nums)) 73