From f79767082fbb41f55497d031d67e857d987bc599 Mon Sep 17 00:00:00 2001
From: Karol Sewilo <karol.sewilo@swmansion.com>
Date: Tue, 10 Sep 2024 16:50:30 +0200
Subject: [PATCH] Not include end of the function in coverage report

commit-id:46696b70
---
 CHANGELOG.md                                   |  7 +++++--
 .../src/coverage_data/function.rs              |  5 -----
 crates/cairo-coverage/src/output/lcov.rs       |  8 +-------
 .../expected_output/complex_calculator.lcov    | 18 +++++++++---------
 .../tests/expected_output/macros.lcov          |  6 +++---
 .../expected_output/macros_not_included.lcov   |  2 +-
 .../tests/expected_output/readme_example.lcov  |  6 +++---
 .../tests/expected_output/scarb_template.lcov  |  2 +-
 .../tests/expected_output/simple.lcov          |  4 ++--
 .../expected_output/simple_with_tests.lcov     |  6 +++---
 lcov.md                                        | 18 +++++++++---------
 11 files changed, 37 insertions(+), 45 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index d1b8f5b..7a853f5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 #### Added
 
-- Option to not include macros in coverage report. To get the same behavior as before use `--include macros`.
+- Option to not include macros in coverage report. To get the same behavior as before use `--include macros`
 
 #### Fixed
 
@@ -18,4 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 #### Changed
 
-- `--include-test-functions` was remove in favor of `--include`. To get same behavior as before use `--include tests-functions`.
\ No newline at end of file
+- `--include-test-functions` was remove in favor of `--include`. To get same behavior as before
+  use `--include tests-functions`
+- Only the start of the function is now included in the report. The end of the function is optional in the lcov format
+  and would produce a warning in tools like `genhtml` when two or more functions are declared on the same line
diff --git a/crates/cairo-coverage/src/coverage_data/function.rs b/crates/cairo-coverage/src/coverage_data/function.rs
index d87eba8..a9c95de 100644
--- a/crates/cairo-coverage/src/coverage_data/function.rs
+++ b/crates/cairo-coverage/src/coverage_data/function.rs
@@ -79,7 +79,6 @@ pub trait FunctionCoverageDataOps {
     fn hit(&self) -> bool;
     fn hit_count(&self) -> HitCount;
     fn starts_at(&self) -> LineNumber;
-    fn ends_at(&self) -> LineNumber;
 }
 
 impl FunctionCoverageDataOps for FunctionCoverageData {
@@ -94,10 +93,6 @@ impl FunctionCoverageDataOps for FunctionCoverageData {
     fn starts_at(&self) -> LineNumber {
         self.keys().min().copied().unwrap_or_default()
     }
-
-    fn ends_at(&self) -> LineNumber {
-        self.keys().max().copied().unwrap_or_default()
-    }
 }
 
 impl From<LineRange> for FunctionCoverageData {
diff --git a/crates/cairo-coverage/src/output/lcov.rs b/crates/cairo-coverage/src/output/lcov.rs
index f0b8276..e5fc17d 100644
--- a/crates/cairo-coverage/src/output/lcov.rs
+++ b/crates/cairo-coverage/src/output/lcov.rs
@@ -21,7 +21,6 @@ pub struct LcovData {
 struct LcovDetails {
     name: FunctionName,
     starts_at: LineNumber,
-    ends_at: LineNumber,
     hit_count: HitCount,
 }
 
@@ -63,7 +62,6 @@ impl From<(&FunctionName, &FunctionCoverageData)> for LcovDetails {
         Self {
             name: name.to_owned(),
             starts_at: function_coverage_data.starts_at(),
-            ends_at: function_coverage_data.ends_at(),
             hit_count: function_coverage_data.hit_count(),
         }
     }
@@ -83,11 +81,7 @@ impl Display for LcovFormat {
 impl Display for LcovData {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
         for function in &self.functions {
-            writeln!(
-                f,
-                "FN:{},{},{}",
-                function.starts_at, function.ends_at, function.name
-            )?;
+            writeln!(f, "FN:{},{}", function.starts_at, function.name)?;
             writeln!(f, "FNDA:{},{}", function.hit_count, function.name)?;
         }
 
diff --git a/crates/cairo-coverage/tests/expected_output/complex_calculator.lcov b/crates/cairo-coverage/tests/expected_output/complex_calculator.lcov
index 9052206..53e3da8 100644
--- a/crates/cairo-coverage/tests/expected_output/complex_calculator.lcov
+++ b/crates/cairo-coverage/tests/expected_output/complex_calculator.lcov
@@ -1,22 +1,22 @@
 TN:
 SF:{dir}/src/lib.cairo
-FN:2,2,complex_calculator::add
+FN:2,complex_calculator::add
 FNDA:2,complex_calculator::add
-FN:17,21,complex_calculator::divide
+FN:17,complex_calculator::divide
 FNDA:1,complex_calculator::divide
-FN:25,30,complex_calculator::factorial
+FN:25,complex_calculator::factorial
 FNDA:12,complex_calculator::factorial
-FN:45,49,complex_calculator::fibonacci
+FN:45,complex_calculator::fibonacci
 FNDA:2,complex_calculator::fibonacci
-FN:53,63,complex_calculator::is_prime
+FN:53,complex_calculator::is_prime
 FNDA:84,complex_calculator::is_prime
-FN:10,10,complex_calculator::multiply
+FN:10,complex_calculator::multiply
 FNDA:2,complex_calculator::multiply
-FN:35,40,complex_calculator::power
+FN:35,complex_calculator::power
 FNDA:10,complex_calculator::power
-FN:6,6,complex_calculator::subtract
+FN:6,complex_calculator::subtract
 FNDA:2,complex_calculator::subtract
-FN:14,14,complex_calculator::unsafe_divide
+FN:14,complex_calculator::unsafe_divide
 FNDA:0,complex_calculator::unsafe_divide
 FNF:9
 FNH:8
diff --git a/crates/cairo-coverage/tests/expected_output/macros.lcov b/crates/cairo-coverage/tests/expected_output/macros.lcov
index 351df62..0b9ff26 100644
--- a/crates/cairo-coverage/tests/expected_output/macros.lcov
+++ b/crates/cairo-coverage/tests/expected_output/macros.lcov
@@ -1,10 +1,10 @@
 TN:
 SF:{dir}/src/lib.cairo
-FN:2,2,macros::assert_macro
+FN:2,macros::assert_macro
 FNDA:1,macros::assert_macro
-FN:1,1,macros::function_with_macro
+FN:1,macros::function_with_macro
 FNDA:1,macros::function_with_macro
-FN:2,2,macros::write_macro
+FN:2,macros::write_macro
 FNDA:0,macros::write_macro
 FNF:3
 FNH:2
diff --git a/crates/cairo-coverage/tests/expected_output/macros_not_included.lcov b/crates/cairo-coverage/tests/expected_output/macros_not_included.lcov
index f26751e..48a755e 100644
--- a/crates/cairo-coverage/tests/expected_output/macros_not_included.lcov
+++ b/crates/cairo-coverage/tests/expected_output/macros_not_included.lcov
@@ -1,6 +1,6 @@
 TN:
 SF:{dir}/src/lib.cairo
-FN:1,1,macros::function_with_macro
+FN:1,macros::function_with_macro
 FNDA:1,macros::function_with_macro
 FNF:1
 FNH:1
diff --git a/crates/cairo-coverage/tests/expected_output/readme_example.lcov b/crates/cairo-coverage/tests/expected_output/readme_example.lcov
index 1b62ee9..c974293 100644
--- a/crates/cairo-coverage/tests/expected_output/readme_example.lcov
+++ b/crates/cairo-coverage/tests/expected_output/readme_example.lcov
@@ -1,10 +1,10 @@
 TN:
 SF:{dir}/src/lib.cairo
-FN:8,8,readme_example::add
+FN:8,readme_example::add
 FNDA:4,readme_example::add
-FN:16,18,readme_example::calculator
+FN:16,readme_example::calculator
 FNDA:4,readme_example::calculator
-FN:12,12,readme_example::multiply
+FN:12,readme_example::multiply
 FNDA:0,readme_example::multiply
 FNF:3
 FNH:2
diff --git a/crates/cairo-coverage/tests/expected_output/scarb_template.lcov b/crates/cairo-coverage/tests/expected_output/scarb_template.lcov
index b1019e8..109e219 100644
--- a/crates/cairo-coverage/tests/expected_output/scarb_template.lcov
+++ b/crates/cairo-coverage/tests/expected_output/scarb_template.lcov
@@ -1,6 +1,6 @@
 TN:
 SF:{dir}/src/lib.cairo
-FN:5,11,scarb_template::fib
+FN:5,scarb_template::fib
 FNDA:34,scarb_template::fib
 FNF:1
 FNH:1
diff --git a/crates/cairo-coverage/tests/expected_output/simple.lcov b/crates/cairo-coverage/tests/expected_output/simple.lcov
index d9413a8..7b772c0 100644
--- a/crates/cairo-coverage/tests/expected_output/simple.lcov
+++ b/crates/cairo-coverage/tests/expected_output/simple.lcov
@@ -1,8 +1,8 @@
 TN:
 SF:{dir}/src/lib.cairo
-FN:7,8,simple::increase_by_one
+FN:7,simple::increase_by_one
 FNDA:4,simple::increase_by_one
-FN:2,3,simple::increase_by_two
+FN:2,simple::increase_by_two
 FNDA:3,simple::increase_by_two
 FNF:2
 FNH:2
diff --git a/crates/cairo-coverage/tests/expected_output/simple_with_tests.lcov b/crates/cairo-coverage/tests/expected_output/simple_with_tests.lcov
index 08a2a5c..aec176b 100644
--- a/crates/cairo-coverage/tests/expected_output/simple_with_tests.lcov
+++ b/crates/cairo-coverage/tests/expected_output/simple_with_tests.lcov
@@ -1,8 +1,8 @@
 TN:
 SF:{dir}/src/lib.cairo
-FN:7,8,simple::increase_by_one
+FN:7,simple::increase_by_one
 FNDA:4,simple::increase_by_one
-FN:2,3,simple::increase_by_two
+FN:2,simple::increase_by_two
 FNDA:3,simple::increase_by_two
 FNF:2
 FNH:2
@@ -15,7 +15,7 @@ LH:4
 end_of_record
 TN:
 SF:{dir}/tests/test_call.cairo
-FN:2,2,simple_tests::test_call::my_test
+FN:2,simple_tests::test_call::my_test
 FNDA:4,simple_tests::test_call::my_test
 FNF:1
 FNH:1
diff --git a/lcov.md b/lcov.md
index 2080c2f..747b66f 100644
--- a/lcov.md
+++ b/lcov.md
@@ -41,11 +41,11 @@ When running with `cairo-coverage` you will get a coverage report in `.lcov` for
 ```lcov
 TN:
 SF:/path/to/your/project/src/lib.rs
-FN:8,8,readme_example::add
+FN:8,readme_example::add
 FNDA:4,readme_example::add
-FN:16,18,readme_example::calculator
+FN:16,readme_example::calculator
 FNDA:4,readme_example::calculator
-FN:12,12,readme_example::multiply
+FN:12,readme_example::multiply
 FNDA:0,readme_example::multiply
 FNF:3
 FNH:2
@@ -68,9 +68,9 @@ Let's break it down
     - **SF**: Source File path `/path/to/your/project/src/lib.rs`
 
 2. **Function Details**
-    - **FN:8,8,readme_example::add**: The `add` function starts at line 8 and ends at line 8.
-    - **FN:12,12,readme_example::multiply**: The `multiply` function starts at line 12 and ends at line 12.
-    - **FN:16,18,readme_example::calculator**: The `calculator` function starts at line 16 and ends at line 18.
+    - **FN:8,readme_example::add**: The `add` function starts at line 8.
+    - **FN:12,readme_example::multiply**: The `multiply` function starts at line 12.
+    - **FN:16,readme_example::calculator**: The `calculator` function starts at line 16.
 
 3. **Function Hit Details**
     - **FNDA:4,readme_example::add**: The `add` function was executed 4 times (Currently not accurate as expected is to
@@ -124,15 +124,15 @@ Let's break it down
 > ```lcov
 > TN:
 > SF:/path/to/your/project/src/operations.cairo
-> FN:8,8,readme_example::add
+> FN:8,readme_example::add
 > FNDA:4,readme_example::add
-> FN:12,12,readme_example::multiply
+> FN:12,readme_example::multiply
 > FNDA:0,readme_example::multiply
 > ... other metrics ...
 > end_of_record
 > TN:
 > SF:/path/to/your/project/src/lib.cairo
-> FN:16,18,readme_example::calculator
+> FN:16,readme_example::calculator
 > FNDA:4,readme_example::calculator
 > ... other metrics ...
 > LH:10