Skip to content

Commit

Permalink
Merge pull request #1 from vibhav/master
Browse files Browse the repository at this point in the history
Allow users to specify maximum line length on the command-line.
  • Loading branch information
robbywalker committed Jul 1, 2013
2 parents a1c7939 + 1bc7dde commit b3e5fa5
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 10 deletions.
18 changes: 12 additions & 6 deletions src/ocstyle/main.py
Expand Up @@ -15,6 +15,7 @@

"""Basic Objective C style checker."""

import argparse
import os.path
import sys

Expand All @@ -23,16 +24,16 @@
from ocstyle import rules


def check(path):
def check(path, maxLineLength):
"""Style checks the given path."""
with open(path) as f:
return checkFile(path, f)
return checkFile(path, f, maxLineLength)


def checkFile(path, f):
def checkFile(path, f, maxLineLength):
"""Style checks the given file object."""
content = f.read()
lineErrors = rules.setupLines(content)
lineErrors = rules.setupLines(content, maxLineLength)
result = parcon.Exact(rules.entireFile).parse_string(content)
if path.endswith(('.m', '.mm')):
result = [err for err in result if not isinstance(err, rules.Error) or not err.kind.endswith('InHeader')]
Expand All @@ -43,10 +44,15 @@ def checkFile(path, f):

def main():
"""Main body of the script."""
for filename in sys.argv[1:]:

parser = argparse.ArgumentParser()
parser.add_argument("--maxLineLength", action="store", type=int, default=120, help="Maximum line length")
args, filenames = parser.parse_known_args()

for filename in filenames:
if not os.path.isdir(filename):
print filename
for part in check(filename):
for part in check(filename, args.maxLineLength):
if isinstance(part, rules.Error):
print 'ERROR: %s' % part
else:
Expand Down
6 changes: 2 additions & 4 deletions src/ocstyle/rules.py
Expand Up @@ -30,14 +30,12 @@

TAB_SIZE = 4

MAX_LINE_LENGTH = 120

LINES = []

# PyLint has a very hard time with our decorator pattern. # pylint: disable=E1120


def setupLines(content):
def setupLines(content, maxLineLength):
"""Setup line position data."""
LINES[:] = []
pos = -1
Expand All @@ -51,7 +49,7 @@ def setupLines(content):
errors = []
for lineNo in range(1, len(LINES)):
lineLength = LINES[lineNo] - LINES[lineNo - 1] - 1 # Remove the \n character.
if lineLength > MAX_LINE_LENGTH:
if lineLength > maxLineLength:
errors.append(Error(
'LineTooLong', 'Line too long: %d chars over the %d limit' % (lineLength, MAX_LINE_LENGTH),
LINES[lineNo], LINES))
Expand Down

0 comments on commit b3e5fa5

Please sign in to comment.