From a7fa8b0fdebe06e35ac099ebd444a59deb37da4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20F=C3=B6hring?= Date: Thu, 18 Jan 2024 18:10:21 +0100 Subject: [PATCH 1/2] Add test showing failure --- test/range_test.exs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/range_test.exs b/test/range_test.exs index c8492a0..b2f9390 100644 --- a/test/range_test.exs +++ b/test/range_test.exs @@ -113,6 +113,9 @@ defmodule SourcerorTest.RangeTest do code = ~S/"fo\no"/ assert decorate(code, to_range(code)) == "«\"fo\\no\"»" + code = ~S/"key: \"value\""/ + assert decorate(code, to_range(code)) == "«\"key: \\\"value\\\"\"»" + code = ~S''' """ foo From 76ba0e0c04b4c11b107dfcf12a45a87c347ad618 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20F=C3=B6hring?= Date: Thu, 18 Jan 2024 18:10:41 +0100 Subject: [PATCH 2/2] Fix bug regarding delimiters in strings It seems escaped double quotes are not counted in `Sourceror.get_range/1`: ```elixir ~S""" "key: \"value\"" """ |> Sourceror.parse_string!() |> Sourceror.get_range() |> dbg ``` --- lib/sourceror/range.ex | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/sourceror/range.ex b/lib/sourceror/range.ex index 285dc1d..ee12aff 100644 --- a/lib/sourceror/range.ex +++ b/lib/sourceror/range.ex @@ -91,7 +91,16 @@ defmodule Sourceror.Range do if meta[:delimiter] in [~S/"""/, ~S/'''/] do meta[:column] + String.length(meta[:delimiter]) else - count = meta[:column] + String.length(last_line) + String.length(meta[:delimiter]) + delimiter_count = + if String.contains?(string, meta[:delimiter]) do + ~r/#{meta[:delimiter]}/ |> Regex.scan(string) |> length() + else + 0 + end + + count = + meta[:column] + String.length(last_line) + String.length(meta[:delimiter]) + + delimiter_count if end_line == meta[:line] do count + 1