def get_rule_diff()

in prebuilt-rules-scripts/generate.py [0:0]


def get_rule_diff(package_version):
    previous_release = _get_last_release_version()
    err_str = f'Most recent detected version: {previous_release} !< {package_version}. '
    err_str += f'Remove {package_version} generated files (3) or specify a higher version to build'
    assert Version(package_version) > Version(previous_release), err_str

    # Path to the JSON rule file generated for this release
    diff_file = str(PREBUILT_RULES.joinpath('diff-files', 'gen-files', f'json-from-docs-{package_version}.json'))
    with open(diff_file, 'r') as source:
        lasted_rules_dict = json.load(source)

    # Path to the final JSON rule file generated for the previous release
    prev_final = str(PREBUILT_RULES.joinpath('diff-files', 'final-files', f'final-rule-file-{previous_release}.json'))
    with open(prev_final, 'r') as source:
        previous_rules_dict = json.load(source)

    diff_dict = []
    lasted_rules_dict = sorted(lasted_rules_dict, key=_sort_by_name)
    previous_rules_dict = sorted(previous_rules_dict, key=_sort_by_name)

    old_name = None
    counter = 0
    rule_found = False

    for new_rule in lasted_rules_dict:
        for old_rule in previous_rules_dict:
            if old_rule['rule_id'] == new_rule['rule_id']:
                if old_rule['name'] != new_rule['name']:
                    old_name = old_rule['name']

                old_file_name = _convert_name_to_filename(old_rule["name"])
                new_file_name = _convert_name_to_filename(new_rule["name"])
                file_name_changed = old_file_name != new_file_name

                old_rule['name'] = new_rule['name']
                if 'changelog' in old_rule:
                    new_rule['changelog'] = old_rule['changelog']
                if old_rule['version'] != new_rule['version']:
                    new_rule['last_update'] = package_version
                    if 'changelog' not in new_rule:
                        new_rule['changelog'] = {}
                        new_rule['changelog']['changes'] = []

                    if 'query' in new_rule:
                        if old_rule['query'] != new_rule['query']:
                            new_rule['changelog']['changes'].append({
                                "version": new_rule['version'],
                                "updated": new_rule['last_update'],
                                "pre_query": old_rule['query'],
                                "doc_text": "Updated query.",
                                "pre_name": old_name
                                })
                        elif old_rule['query'] == new_rule['query']:
                            new_rule['changelog']['changes'].append({
                                "version": new_rule['version'],
                                "updated": new_rule['last_update'],
                                "pre_query": old_rule['query'],
                                "doc_text": "Formatting only",
                                "pre_name": old_name
                            })
                    if 'query' not in new_rule:
                        new_rule['changelog']['changes'].append({
                            "version": new_rule['version'],
                            "updated": new_rule['last_update'],
                            "pre_query": "N/A",
                            "doc_text": "Formatting only",
                            "pre_name": old_name
                        })

                    if file_name_changed:
                        new_rule['changelog']['changes'][-1]['duplicate_old_file'] = old_file_name
                else:
                    new_rule['last_update'] = old_rule['last_update']

                diff_dict.append(new_rule)
                new_rule['added'] = old_rule['added']
                old_name = None
                rule_found = True

        if rule_found is False:
            new_rule['last_update'] = package_version
            new_rule['added'] = package_version
            diff_dict.append(new_rule)
            counter = counter + 1

        rule_found = False

    # Outputs the final JSON file from which the documentation is generated. Note
    # that this file is needed for the next release to compare future changes.
    final = str(PREBUILT_RULES.joinpath('diff-files', 'final-files', f'final-rule-file-{package_version}.json'))
    with open(final, "w") as fp:
        json.dump(diff_dict, fp, indent=2)

    click.echo(f'saved file: {final}')