Skip to content

Commit

Permalink
Merge branch '__rultor'
Browse files Browse the repository at this point in the history
  • Loading branch information
rultor committed Jul 15, 2020
2 parents a6659fb + c4e4980 commit aeb208e
Showing 1 changed file with 49 additions and 22 deletions.
71 changes: 49 additions & 22 deletions aibolit/patterns/er_class/er_class.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,54 @@
import javalang

# The MIT License (MIT)
#
# Copyright (c) 2020 Aibolit
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
from aibolit.ast_framework import ASTNodeType, AST
from aibolit.utils.ast_builder import build_ast
from typing import List


class ErClass:
'''
Check if a class name include the forbidden word
'''
forbiden_words_in_class_names = (
'manager',
'controller',
'router',
'dispatcher',
'printer',
'writer',
'reader',
'parser',
'generator',
'renderer',
'listener',
'producer',
'holder',
'interceptor')

def __init__(self):
pass

def value(self, filename: str):
classes = ('manager',
'controller',
'router',
'dispatcher',
'printer',
'writer',
'reader',
'parser',
'generator',
'renderer',
'listener',
'producer',
'holder',
'interceptor')
tree = build_ast(filename).filter(javalang.tree.ClassDeclaration)
return [node._position.line for _, node in tree if [n for n in classes if n in node.name.lower()] != []]
def value(self, filename: str) -> List[int]:
lines: List[int] = []
ast = AST.build_from_javalang(build_ast(filename))
for node in ast.get_proxy_nodes(ASTNodeType.CLASS_DECLARATION):
class_name = node.name.lower()
if any(forbiden_word in class_name for forbiden_word in self.forbiden_words_in_class_names):
lines.append(node.line)
return lines

0 comments on commit aeb208e

Please sign in to comment.