def test_pycodestyle_config(workspace): """ Test that we load config files properly. Config files are loaded in the following order: tox.ini pep8.cfg setup.cfg pycodestyle.cfg Each overriding the values in the last. These files are first looked for in the current document's directory and then each parent directory until any one is found terminating at the workspace root. If any section called 'pycodestyle' exists that will be solely used and any config in a 'pep8' section will be ignored """ doc_uri = uris.from_fs_path(os.path.join(workspace.root_path, 'test.py')) workspace.put_document(doc_uri, DOC) doc = workspace.get_document(doc_uri) config = Config(workspace.root_uri, {}) # Make sure we get a warning for 'indentation contains tabs' diags = pycodestyle_lint.pyls_lint(config, doc) assert [d for d in diags if d['code'] == 'W191'] content = { 'setup.cfg': ('[pycodestyle]\nignore = W191', True), 'tox.ini': ('', False) } for conf_file, (content, working) in list(content.items()): # Now we'll add config file to ignore it with open(os.path.join(workspace.root_path, conf_file), 'w+') as f: f.write(content) # And make sure we don't get any warnings diags = pycodestyle_lint.pyls_lint(config, doc) assert len([d for d in diags if d['code'] == 'W191']) == 0 if working else 1 os.unlink(os.path.join(workspace.root_path, conf_file)) # Make sure we can ignore via the PYLS config as well config.update({'plugins': {'pycodestyle': {'ignore': ['W191']}}}) # And make sure we only get one warning diags = pycodestyle_lint.pyls_lint(config, doc) assert not [d for d in diags if d['code'] == 'W191'] # Ignore both warnings config.update({'plugins': {'pycodestyle': {'ignore': ['W191', 'W391']}}}) # And make sure we get neither assert not [d for d in diags if d['code'] == 'W191'] assert not [d for d in diags if d['code'] == 'W391']
def config(tmpdir): config = Config(uris.from_fs_path(str(tmpdir)), {}, 0, {}) config.update(pyls_settings()) return config