Skip to content

Commit

Permalink
Create a Python package of Tidy
Browse files Browse the repository at this point in the history
  • Loading branch information
askeing authored and edunham committed Apr 13, 2016
1 parent 711bfe2 commit af2ca1f
Show file tree
Hide file tree
Showing 18 changed files with 233 additions and 5 deletions.
6 changes: 6 additions & 0 deletions python/tidy/HISTORY.rst
@@ -0,0 +1,6 @@
Release History
---------------

0.0.1 (2016-04-12)
++++++++++++++++++
- Package Tidy
28 changes: 28 additions & 0 deletions python/tidy/Makefile
@@ -0,0 +1,28 @@
PYTHON := python
VENV := env-$(PYTHON)

# for travis

$(VENV)/bin/python:
[ -d $(VENV) ] || $(PYTHON) -m virtualenv $(VENV) || virtualenv $(VENV)
$(VENV)/bin/pip install --upgrade setuptools
$(VENV)/bin/python setup.py develop


.PHONY: dev-env
dev-env: $(VENV)/bin/python


# for testing
.PHONY: test
test: dev-env
$(VENV)/bin/pip install --upgrade funcsigs
$(VENV)/bin/pip install --upgrade mock
$(VENV)/bin/python -m unittest discover -s tests -v


.PHONY: clean
clean:
find . -name "*.pyc" -type f -delete


12 changes: 12 additions & 0 deletions python/tidy/README.rst
@@ -0,0 +1,12 @@
servo_tidy
==========

Servo's code and license checker.

Install from PyPI (coming soon) or

```
pip install -e git+https://github.com/servo/servo.git#egg=servo_tidy&subdirectory=python/tidy
```


File renamed without changes.
62 changes: 62 additions & 0 deletions python/tidy/servo_tidy/licenseck.py
@@ -0,0 +1,62 @@
# Copyright 2013 The Servo Project Developers. See the COPYRIGHT
# file at the top-level directory of this distribution.
#
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
# option. This file may not be copied, modified, or distributed
# except according to those terms.


# These licenses are valid for use in Servo
licenses = [

"""\
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
""",

"""\
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
""",

"""\
#!/usr/bin/env python
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
""",

"""\
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
""",

"""\
// Copyright 2013 The Servo Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
""",

"""\
# Copyright 2013 The Servo Project Developers. See the COPYRIGHT
# file at the top-level directory of this distribution.
#
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
# option. This file may not be copied, modified, or distributed
# except according to those terms.
""",

] # noqa: Indicate to flake8 that we do not want to check indentation here
9 changes: 4 additions & 5 deletions python/tidy/tidy.py → python/tidy/servo_tidy/tidy.py
Expand Up @@ -69,8 +69,6 @@
os.path.join(".", "."),
]

spec_base_path = "components/script/dom/"


def is_iter_empty(iterator):
try:
Expand Down Expand Up @@ -223,7 +221,7 @@ def find_reverse_dependencies(dependency, version, content):
raise StopIteration

# package names to be neglected (as named by cargo)
exceptions = ["bitflags", "xml-rs"]
exceptions = ["bitflags", "xml-rs", "byteorder"]

import toml
content = toml.loads(contents)
Expand Down Expand Up @@ -527,9 +525,10 @@ def check_json(filename, contents):


def check_spec(file_name, lines):
if spec_base_path not in file_name:
base_path = "components/script/dom/"
if base_path not in file_name:
raise StopIteration
file_name = os.path.relpath(os.path.splitext(file_name)[0], spec_base_path)
file_name = os.path.relpath(os.path.splitext(file_name)[0], base_path)
patt = re.compile("^\s*\/\/.+")

# Pattern representing a line with a macro
Expand Down
40 changes: 40 additions & 0 deletions python/tidy/setup.py
@@ -0,0 +1,40 @@
import os
from setuptools import setup, find_packages


VERSION = '0.0.1'

install_requires = [
]

here = os.path.dirname(os.path.abspath(__file__))
# get documentation from the README and HISTORY
try:
with open(os.path.join(here, 'README.rst')) as doc:
readme = doc.read()
except:
readme = ''

try:
with open(os.path.join(here, 'HISTORY.rst')) as doc:
history = doc.read()
except:
history = ''

long_description = readme + '\n\n' + history

if __name__ == '__main__':
setup(
name='servo_tidy',
version=VERSION,
description='The tidy package of Servo',
long_description=long_description,
keywords='mozilla servo tidy ',
author='The Servo Project Developers',
author_email='dev-servo@lists.mozilla.org',
url='https://github.com/servo/servo_tindy',
packages=find_packages(exclude=['ez_setup', 'examples', 'tests']),
package_data={},
install_requires=install_requires,
zip_safe=False,
)
8 changes: 8 additions & 0 deletions python/tidy/tests/__init__.py
@@ -0,0 +1,8 @@
# Copyright 2013 The Servo Project Developers. See the COPYRIGHT
# file at the top-level directory of this distribution.
#
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
# option. This file may not be copied, modified, or distributed
# except according to those terms.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
73 changes: 73 additions & 0 deletions python/tidy/tests/test_tidy.py
@@ -0,0 +1,73 @@
# Copyright 2013 The Servo Project Developers. See the COPYRIGHT
# file at the top-level directory of this distribution.
#
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
# option. This file may not be copied, modified, or distributed
# except according to those terms.

import unittest
from servo_tidy import tidy


def iterFile(name):
return iter(['tests/' + name])


class CheckTidiness(unittest.TestCase):
def test_spaces_correctnes(self):
errors = tidy.collect_errors_for_files(iterFile('wrong_space.rs'), [], [tidy.check_by_line])
self.assertEqual('trailing whitespace', errors.next()[2])
self.assertEqual('no newline at EOF', errors.next()[2])
self.assertEqual('tab on line', errors.next()[2])
self.assertEqual('CR on line', errors.next()[2])

def test_long_line(self):
errors = tidy.collect_errors_for_files(iterFile('long_line.rs'), [], [tidy.check_by_line])
self.assertEqual('Line is longer than 120 characters', errors.next()[2])

def test_whatwg_link(self):
errors = tidy.collect_errors_for_files(iterFile('whatwg_link.rs'), [], [tidy.check_by_line])
self.assertTrue('link to WHATWG may break in the future, use this format instead:' in errors.next()[2])
self.assertTrue('links to WHATWG single-page url, change to multi page:' in errors.next()[2])

def test_licence(self):
errors = tidy.collect_errors_for_files(iterFile('incorrect_license.rs'), [], [tidy.check_license])
self.assertEqual('incorrect license', errors.next()[2])

def test_rust(self):
errors = tidy.collect_errors_for_files(iterFile('rust_tidy.rs'), [], [tidy.check_rust])
self.assertEqual('use statement spans multiple lines', errors.next()[2])
self.assertEqual('missing space before }', errors.next()[2])
self.assertTrue('use statement is not in alphabetical order' in errors.next()[2])
self.assertEqual('encountered whitespace following a use statement', errors.next()[2])
self.assertTrue('mod declaration is not in alphabetical order' in errors.next()[2])
self.assertEqual('mod declaration spans multiple lines', errors.next()[2])
self.assertTrue('extern crate declaration is not in alphabetical order' in errors.next()[2])
self.assertEqual('missing space before ->', errors.next()[2])
self.assertEqual('missing space after ->', errors.next()[2])
self.assertEqual('missing space after :', errors.next()[2])
self.assertEqual('missing space before {', errors.next()[2])
self.assertEqual('missing space before =', errors.next()[2])
self.assertEqual('missing space after =', errors.next()[2])
self.assertEqual('missing space before -', errors.next()[2])
self.assertEqual('missing space before *', errors.next()[2])
self.assertEqual('missing space after =>', errors.next()[2])
self.assertEqual('extra space before :', errors.next()[2])
self.assertEqual('extra space before :', errors.next()[2])
self.assertEqual('use &[T] instead of &Vec<T>', errors.next()[2])
self.assertEqual('use &str instead of &String', errors.next()[2])

def test_webidl(self):
errors = tidy.collect_errors_for_files(iterFile('spec.webidl'), [tidy.check_webidl_spec], [])
self.assertEqual('No specification link found.', errors.next()[2])

def test_toml(self):
errors = tidy.collect_errors_for_files(iterFile('test.toml'), [tidy.check_toml], [])
self.assertEqual('found asterisk instead of minimum version number', errors.next()[2])


def do_tests():
suite = unittest.TestLoader().loadTestsFromTestCase(CheckTidiness)
unittest.TextTestRunner(verbosity=2).run(suite)
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 comments on commit af2ca1f

Please sign in to comment.