Skip to content

Commit 72fc8b2

Browse files
committed
feat(config): add monorepo support
1 parent 75882ba commit 72fc8b2

11 files changed

Lines changed: 68 additions & 40 deletions

File tree

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ repos:
3535
hooks:
3636
- id: pymetrica
3737
name: pymetrica
38-
entry: pymetrica run-all . --report-type BASIC_HOOK
38+
entry: pymetrica run-all --report-type BASIC_HOOK
3939
language: python
4040
pass_filenames: false
4141
additional_dependencies: ["."]

.pre-commit-hooks.yaml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,41 @@
11
- id: pymetrica
22
name: pymetrica
3-
entry: pymetrica-run-all . --report-type BASIC_HOOK
3+
entry: pymetrica-run-all --report-type BASIC_HOOK
44
language: python
55
require_serial: true
66
pass_filenames: false
77

88
- id: pymetrica-aloc
99
name: pymetrica aloc
10-
entry: pymetrica-aloc . --report-type BASIC_HOOK
10+
entry: pymetrica-aloc --report-type BASIC_HOOK
1111
language: python
1212
require_serial: true
1313
pass_filenames: false
1414

1515
- id: pymetrica-cc
1616
name: pymetrica cc
17-
entry: pymetrica-cc . --report-type BASIC_HOOK
17+
entry: pymetrica-cc --report-type BASIC_HOOK
1818
language: python
1919
require_serial: true
2020
pass_filenames: false
2121

2222
- id: pymetrica-hv
2323
name: pymetrica hv
24-
entry: pymetrica-hv . --report-type BASIC_HOOK
24+
entry: pymetrica-hv --report-type BASIC_HOOK
2525
language: python
2626
require_serial: true
2727
pass_filenames: false
2828

2929
- id: pymetrica-po
3030
name: pymetrica po
31-
entry: pymetrica-po . --report-type BASIC_HOOK
31+
entry: pymetrica-po --report-type BASIC_HOOK
3232
language: python
3333
require_serial: true
3434
pass_filenames: false
3535

3636
- id: pymetrica-mc
3737
name: pymetrica mc
38-
entry: pymetrica-mc . --report-type BASIC_HOOK
38+
entry: pymetrica-mc --report-type BASIC_HOOK
3939
language: python
4040
require_serial: true
4141
pass_filenames: false

pymetrica/metric_calculators/abstract_lines_of_code/get_aloc.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from pymetrica.codebase_parser import parse_codebase
44
from pymetrica.report_generators import REPORTS_MAPPING
55
from pymetrica.utils import run_profiler
6+
from pymetrica.utils.settings import update_config_from_pyproject
67

78
from .aloc_calculator import AlocCalculator
89

@@ -17,13 +18,14 @@
1718
help="Whether to get top findings regardless of threshold values.",
1819
)
1920
@click.option("-rt", "--report-type", type=str, default="BASIC_TERMINAL")
20-
@click.argument("dir_path")
21+
@click.argument("dir_path", default=".")
2122
@run_profiler
2223
def aloc(
2324
dir_path: str,
2425
report_type: str,
2526
audit: bool = False,
2627
) -> None:
28+
update_config_from_pyproject(dir_path)
2729
codebase = parse_codebase(dir_path)
2830
aloc_metric = aloc_calculator.calculate_metric(codebase)
2931
report_generator = REPORTS_MAPPING[report_type]([aloc_metric])

pymetrica/metric_calculators/base_stats/get_base_stats.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from pymetrica.codebase_parser import parse_codebase
44
from pymetrica.report_generators import REPORTS_MAPPING
55
from pymetrica.utils import run_profiler
6+
from pymetrica.utils.settings import update_config_from_pyproject
67

78
from .base_stats_calculator import BaseStatsCalculator
89
from .diagram_generator import create_diagram
@@ -24,6 +25,7 @@ def base_stats(
2425
diagram: bool = False,
2526
diagram_filename: str | None = None,
2627
) -> None:
28+
update_config_from_pyproject(dir_path)
2729
codebase = parse_codebase(dir_path)
2830
if diagram:
2931
create_diagram(codebase, filename=diagram_filename)

pymetrica/metric_calculators/cyclomatic_complexity/get_cc.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from pymetrica.codebase_parser import parse_codebase
44
from pymetrica.report_generators import REPORTS_MAPPING
55
from pymetrica.utils import run_profiler
6+
from pymetrica.utils.settings import update_config_from_pyproject
67

78
from .cc_calculator import CCCalculator
89

@@ -17,13 +18,14 @@
1718
help="Whether to get top findings regardless of threshold values.",
1819
)
1920
@click.option("-rt", "--report-type", type=str, default="BASIC_TERMINAL")
20-
@click.argument("dir_path")
21+
@click.argument("dir_path", default=".")
2122
@run_profiler
2223
def cc(
2324
dir_path: str,
2425
report_type: str,
2526
audit: bool = False,
2627
) -> None:
28+
update_config_from_pyproject(dir_path)
2729
codebase = parse_codebase(dir_path)
2830
cc_metric = cc_calculator.calculate_metric(codebase)
2931
report_generator = REPORTS_MAPPING[report_type]([cc_metric])

pymetrica/metric_calculators/halstead_volume/get_hv.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from pymetrica.codebase_parser import parse_codebase
44
from pymetrica.report_generators import REPORTS_MAPPING
55
from pymetrica.utils import run_profiler
6+
from pymetrica.utils.settings import update_config_from_pyproject
67

78
from .hv_calculator import HalsteadVolumeCalculator
89

@@ -17,13 +18,14 @@
1718
help="Whether to get top findings regardless of threshold values.",
1819
)
1920
@click.option("-rt", "--report-type", type=str, default="BASIC_TERMINAL")
20-
@click.argument("dir_path")
21+
@click.argument("dir_path", default=".")
2122
@run_profiler
2223
def hv(
2324
dir_path: str,
2425
report_type: str,
2526
audit: bool = False,
2627
) -> None:
28+
update_config_from_pyproject(dir_path)
2729
codebase = parse_codebase(dir_path)
2830
hv_metric = hv_calculator.calculate_metric(codebase)
2931
report_generator = REPORTS_MAPPING[report_type]([hv_metric])

pymetrica/metric_calculators/instability/get_instability.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from pymetrica.codebase_parser import parse_codebase
44
from pymetrica.report_generators import REPORTS_MAPPING
55
from pymetrica.utils.profiler import run_profiler
6+
from pymetrica.utils.settings import update_config_from_pyproject
67

78
from .instability_calculator import InstabilityCalculator
89

@@ -11,13 +12,14 @@
1112

1213
@click.command()
1314
@click.option("-rt", "--report-type", type=str, default="BASIC_TERMINAL")
14-
@click.argument("dir_path")
15+
@click.argument("dir_path", default=".")
1516
@run_profiler
1617
def li(
1718
dir_path: str,
1819
report_type: str,
1920
audit: bool = False,
2021
) -> None:
22+
update_config_from_pyproject(dir_path)
2123
codebase = parse_codebase(dir_path)
2224
instability_metric = instability_calculator.calculate_metric(codebase)
2325
report_generator = REPORTS_MAPPING[report_type]([instability_metric])

pymetrica/metric_calculators/maintainability_cost/get_mc.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from pymetrica.codebase_parser import parse_codebase
44
from pymetrica.report_generators import REPORTS_MAPPING
55
from pymetrica.utils import run_profiler
6+
from pymetrica.utils.settings import update_config_from_pyproject
67

78
from .mc_calculator import MaintainabilityCostCalculator
89

@@ -17,13 +18,14 @@
1718
help="Whether to get top findings regardless of threshold values.",
1819
)
1920
@click.option("-rt", "--report-type", type=str, default="BASIC_TERMINAL")
20-
@click.argument("dir_path")
21+
@click.argument("dir_path", default=".")
2122
@run_profiler
2223
def mc(
2324
dir_path: str,
2425
report_type: str,
2526
audit: bool = False,
2627
) -> None:
28+
update_config_from_pyproject(dir_path)
2729
codebase = parse_codebase(dir_path)
2830
mc_metric = mc_calculator.calculate_metric(codebase)
2931
report_generator = REPORTS_MAPPING[report_type]([mc_metric])

pymetrica/metric_calculators/primitive_obsession/get_po.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from pymetrica.codebase_parser import parse_codebase
44
from pymetrica.report_generators import REPORTS_MAPPING
55
from pymetrica.utils import run_profiler
6+
from pymetrica.utils.settings import update_config_from_pyproject
67

78
from .po_calculator import PrimitiveObsessionCalculator
89

@@ -17,13 +18,14 @@
1718
help="Whether to get top findings regardless of threshold values.",
1819
)
1920
@click.option("-rt", "--report-type", type=str, default="BASIC_TERMINAL")
20-
@click.argument("dir_path")
21+
@click.argument("dir_path", default=".")
2122
@run_profiler
2223
def po(
2324
dir_path: str,
2425
report_type: str,
2526
audit: bool = False,
2627
) -> None:
28+
update_config_from_pyproject(dir_path)
2729
codebase = parse_codebase(dir_path)
2830
po_metric = po_calculator.calculate_metric(codebase)
2931
report_generator = REPORTS_MAPPING[report_type]([po_metric])

pymetrica/run_all.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from pymetrica.models.metric import Metric, Results
55
from pymetrica.report_generators.reports_mapping import REPORTS_MAPPING
66
from pymetrica.utils.profiler import run_profiler
7+
from pymetrica.utils.settings import update_config_from_pyproject
78

89
from .metric_calculators import (
910
AlocCalculator,
@@ -38,14 +39,15 @@
3839
help="Whether to generate a long summary report for each metric.",
3940
)
4041
@click.option("-rt", "--report-type", type=str, default="BASIC_TERMINAL")
41-
@click.argument("dir_path")
42+
@click.argument("dir_path", default=".")
4243
@run_profiler
4344
def run_all(
4445
dir_path: str,
4546
report_type: str,
4647
audit: bool = False,
4748
long_report: bool = False,
4849
) -> None:
50+
update_config_from_pyproject(dir_path)
4951
codebase = parse_codebase(dir_path)
5052
metrics = list[Metric[Results]]()
5153
metrics.append(base_stats_calculator.calculate_metric(codebase))

0 commit comments

Comments
 (0)