Skip to content

Commit

Permalink
change: enable rules plugin support
Browse files Browse the repository at this point in the history
enable rules plugin support and make yamllint loads plugin rules also,
along with simple test cases loading rules.
  • Loading branch information
ssato committed Sep 16, 2020
1 parent 645c6f6 commit 01554f2
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 4 deletions.
48 changes: 48 additions & 0 deletions tests/test_rules.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
# Copyright (C) 2020 Satoru SATOH
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import unittest

from tests.plugins import example

import yamllint.rules


RULE_NEVER_EXISTS = "rule_never_exists"
PLUGIN_RULES = example.RULES_MAP


class TestCase(unittest.TestCase):
"""Test cases for yamllint.rules.__init__.*.
"""
def test_get_default_rules(self):
self.assertEqual(yamllint.rules.get(yamllint.rules.braces.ID),
yamllint.rules.braces)
self.assertEqual(yamllint.rules.get(yamllint.rules.braces.ID,
plugin_rules=PLUGIN_RULES),
yamllint.rules.braces)
with self.assertRaises(ValueError):
yamllint.rules.get(RULE_NEVER_EXISTS)

def test_get_plugin_rules(self):
plugin_rule_id = example.override_comments.ID
plugin_rule_mod = example.override_comments

self.assertEqual(yamllint.rules.get(plugin_rule_id,
plugin_rules=PLUGIN_RULES),
plugin_rule_mod)

with self.assertRaises(ValueError):
yamllint.rules.get(RULE_NEVER_EXISTS, plugin_rules=PLUGIN_RULES)
20 changes: 16 additions & 4 deletions yamllint/rules/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

import yamllint.plugins
from yamllint.rules import (
braces,
brackets,
Expand Down Expand Up @@ -62,9 +63,20 @@
truthy.ID: truthy,
}

_PLUGIN_RULES = yamllint.plugins.get_plugin_rules_map()

def get(id):
if id not in _RULES:
raise ValueError('no such rule: "%s"' % id)

return _RULES[id]
def get(rule_id, rules=None, plugin_rules=None):
if rules is None:
rules = _RULES

if plugin_rules is None:
plugin_rules = _PLUGIN_RULES

if rule_id in rules:
return rules[rule_id]

if rule_id in plugin_rules:
return plugin_rules[rule_id]

raise ValueError('no such rule: "%s"' % rule_id)

0 comments on commit 01554f2

Please sign in to comment.