RULEAPI-596 Bring all the meta info into the language subfolder for new single-lang rules
This commit is contained in:
parent
688ea2889d
commit
97cd183fc2
@ -0,0 +1,2 @@
|
||||
{
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
{
|
||||
"title": "FIXME",
|
||||
"type": "CODE_SMELL",
|
||||
"status": "ready",
|
||||
"remediation": {
|
||||
"func": "Constant\/Issue",
|
||||
"constantCost": "5min"
|
||||
},
|
||||
"tags": [
|
||||
],
|
||||
"defaultSeverity": "Major",
|
||||
"ruleSpecification": "RSPEC-${RSPEC_ID}",
|
||||
"sqKey": "S${RSPEC_ID}",
|
||||
"scope": "All",
|
||||
"qualityProfiles": ["Sonar way"]
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
FIXME: add a description
|
||||
|
||||
// If you want to factorize the description uncomment the following line and create the file.
|
||||
//include::../description.adoc[]
|
||||
|
||||
== Noncompliant Code Example
|
||||
|
||||
----
|
||||
FIXME
|
||||
----
|
||||
|
||||
== Compliant Solution
|
||||
|
||||
----
|
||||
FIXME
|
||||
----
|
||||
|
||||
== See
|
||||
|
||||
FIXME: A list of links
|
@ -70,27 +70,47 @@ class RuleCreator:
|
||||
repo_dir = Path(self.repository.working_dir)
|
||||
rule_dir = repo_dir.joinpath('rules', f'S{rule_number}')
|
||||
rule_dir.mkdir()
|
||||
common_template = self.TEMPLATE_PATH.joinpath('common')
|
||||
lang_specific_template = self.TEMPLATE_PATH.joinpath('language_specific')
|
||||
copy_directory_content(common_template, rule_dir)
|
||||
lang_count = sum(1 for l in languages)
|
||||
if lang_count > 1:
|
||||
self._fill_multi_lang_template_files(rule_dir, rule_number, languages)
|
||||
else:
|
||||
self._fill_single_lang_template_files(rule_dir, rule_number, next(iter(languages)))
|
||||
|
||||
for lang in languages:
|
||||
lang_dir = rule_dir.joinpath(lang)
|
||||
lang_dir.mkdir()
|
||||
copy_directory_content(lang_specific_template, lang_dir)
|
||||
|
||||
for rule_item in rule_dir.glob('**/*'):
|
||||
if rule_item.is_file():
|
||||
template_content = rule_item.read_text()
|
||||
final_content = template_content.replace('${RSPEC_ID}', str(rule_number))
|
||||
rule_item.write_text(final_content)
|
||||
self.repository.git.add('--all')
|
||||
self.repository.index.commit(f'Create rule S{rule_number}')
|
||||
|
||||
self.repository.git.push('origin', branch_name)
|
||||
|
||||
return branch_name
|
||||
|
||||
|
||||
def _fill_in_the_blanks_in_the_template(self, rule_dir: Path, rule_number: int):
|
||||
for rule_item in rule_dir.glob('**/*'):
|
||||
if rule_item.is_file():
|
||||
template_content = rule_item.read_text()
|
||||
final_content = template_content.replace('${RSPEC_ID}', str(rule_number))
|
||||
rule_item.write_text(final_content)
|
||||
|
||||
def _fill_multi_lang_template_files(self, rule_dir: Path, rule_number: int, languages: Iterable[str]):
|
||||
common_template = self.TEMPLATE_PATH.joinpath('multi_language', 'common')
|
||||
lang_specific_template = self.TEMPLATE_PATH.joinpath('multi_language', 'language_specific')
|
||||
copy_directory_content(common_template, rule_dir)
|
||||
|
||||
for lang in languages:
|
||||
lang_dir = rule_dir.joinpath(lang)
|
||||
lang_dir.mkdir()
|
||||
copy_directory_content(lang_specific_template, lang_dir)
|
||||
|
||||
self._fill_in_the_blanks_in_the_template(rule_dir, rule_number)
|
||||
|
||||
def _fill_single_lang_template_files(self, rule_dir: Path, rule_number: int, language: str):
|
||||
common_template = self.TEMPLATE_PATH.joinpath('single_language', 'common')
|
||||
lang_specific_template = self.TEMPLATE_PATH.joinpath('single_language', 'language_specific')
|
||||
copy_directory_content(common_template, rule_dir)
|
||||
|
||||
lang_dir = rule_dir.joinpath(language)
|
||||
lang_dir.mkdir()
|
||||
copy_directory_content(lang_specific_template, lang_dir)
|
||||
|
||||
self._fill_in_the_blanks_in_the_template(rule_dir, rule_number)
|
||||
|
||||
def create_new_rule_pull_request(self, token: str, rule_number: int, languages: Iterable[str], *, user: Optional[str]) -> PullRequest:
|
||||
branch_name = self.create_new_rule_branch(rule_number, languages)
|
||||
click.echo(f'Created rule Branch {branch_name}')
|
||||
@ -126,4 +146,4 @@ class RuleCreator:
|
||||
self.repository.git.checkout('-B', new_branch)
|
||||
yield
|
||||
finally:
|
||||
self.repository.git.checkout(past_branch)
|
||||
self.repository.git.checkout(past_branch)
|
||||
|
@ -77,8 +77,8 @@ def read_counter_file(repo):
|
||||
return counter_path.read_text()
|
||||
|
||||
|
||||
def test_create_new_rule_branch(rule_creator: RuleCreator, mock_rspec_repo: Repo):
|
||||
'''Test create_new_rule_branch.'''
|
||||
def test_create_new_multi_lang_rule_branch(rule_creator: RuleCreator, mock_rspec_repo: Repo):
|
||||
'''Test create_new_rule_branch for a multi-language rule.'''
|
||||
rule_number = rule_creator.reserve_rule_number()
|
||||
|
||||
languages = ['java', 'javascript']
|
||||
@ -89,7 +89,7 @@ def test_create_new_rule_branch(rule_creator: RuleCreator, mock_rspec_repo: Repo
|
||||
rule_dir = Path(mock_rspec_repo.working_dir).joinpath('rules', f'S{rule_number}')
|
||||
assert rule_dir.exists()
|
||||
|
||||
common_root = rule_creator.TEMPLATE_PATH.joinpath('common')
|
||||
common_root = rule_creator.TEMPLATE_PATH.joinpath('multi_language', 'common')
|
||||
for common_item in common_root.glob('**/*'):
|
||||
if common_item.is_file():
|
||||
expected_content = common_item.read_text().replace('${RSPEC_ID}', str(rule_number))
|
||||
@ -97,7 +97,36 @@ def test_create_new_rule_branch(rule_creator: RuleCreator, mock_rspec_repo: Repo
|
||||
actual_content = rule_dir.joinpath(relative_path).read_text()
|
||||
assert actual_content == expected_content
|
||||
|
||||
lang_root = rule_creator.TEMPLATE_PATH.joinpath('language_specific')
|
||||
lang_root = rule_creator.TEMPLATE_PATH.joinpath('multi_language', 'language_specific')
|
||||
for lang in languages:
|
||||
for lang_item in lang_root.glob('**/*'):
|
||||
if lang_item.is_file():
|
||||
expected_content = lang_item.read_text().replace('${RSPEC_ID}', str(rule_number))
|
||||
relative_path = lang_item.relative_to(lang_root)
|
||||
actual_content = rule_dir.joinpath(lang, relative_path).read_text()
|
||||
assert actual_content == expected_content
|
||||
|
||||
def test_create_new_single_lang_rule_branch(rule_creator: RuleCreator, mock_rspec_repo: Repo):
|
||||
'''Test create_new_rule_branch for a single-language rule.'''
|
||||
rule_number = rule_creator.reserve_rule_number()
|
||||
|
||||
languages = ['cfamily']
|
||||
branch = rule_creator.create_new_rule_branch(rule_number, languages)
|
||||
|
||||
# Check that the branch was pushed successfully to the origin
|
||||
mock_rspec_repo.git.checkout(branch)
|
||||
rule_dir = Path(mock_rspec_repo.working_dir).joinpath('rules', f'S{rule_number}')
|
||||
assert rule_dir.exists()
|
||||
|
||||
common_root = rule_creator.TEMPLATE_PATH.joinpath('single_language', 'common')
|
||||
for common_item in common_root.glob('**/*'):
|
||||
if common_item.is_file():
|
||||
expected_content = common_item.read_text().replace('${RSPEC_ID}', str(rule_number))
|
||||
relative_path = common_item.relative_to(common_root)
|
||||
actual_content = rule_dir.joinpath(relative_path).read_text()
|
||||
assert actual_content == expected_content
|
||||
|
||||
lang_root = rule_creator.TEMPLATE_PATH.joinpath('single_language', 'language_specific')
|
||||
for lang in languages:
|
||||
for lang_item in lang_root.glob('**/*'):
|
||||
if lang_item.is_file():
|
||||
|
Loading…
x
Reference in New Issue
Block a user