ruby/syntax_suggest

Trailing string

Closed this issue · 5 comments

require "rails_helper"
RSpec.describe TelehealthAppointment, type: :model do
  describe "#participants_state" do
    context "timezones workaround" do
      it "should receive a time in UTC format and return the time with the"\
        "office's UTC offset substracted from it" do
        travel_to DateTime.new(2020, 10, 1, 10, 0, 0) do
          office = build(:office)
        end
      end
    end
  end
  describe "#past?" do
    context "more than 15 min have passed since appointment start time" do
      it "returns true" do # <== HERE
    end
  end
end

The it "returns true" do is the problem but due to the indentation it says:

   1  require "rails_helper"
   2  RSpec.describe TelehealthAppointment, type: :model do
   3    describe "#participants_state" do
   4      context "timezones workaround" do
   5        it "should receive a time in UTC format and return the time with the"\
❯  6          "office's UTC offset substracted from it" do
❯  7          travel_to DateTime.new(2020, 10, 1, 10, 0, 0) do
❯  9          end
  10        end
  11      end
  12    end
  13    describe "#past?" do
  14      context "more than 15 min have passed since appointment start time" do
  15        it "returns true" do # <== HERE
  16      end
  17    end
  18  end

Which is incorrect

I'm thinking that when i'm creating code_lines, I could check to see if a line ends in a slash \ and if it does, group it with the next line so this:

5        it "should receive a time in UTC format and return the time with the"\
6          "office's UTC offset substracted from it" do

Would become

5        it "should receive a time in UTC format and return the time with the" "office's UTC offset substracted from it" do
6        # Make invisible

It's a bit of a special case, but re-formatting the document in this way would allow us to handle this case without any changes to the search logic.

Consequences: It would be confusing if this line ends up being in the error output for the end user. So it's not ideal. I could maybe record the modification, and then un-do it later if it's seen that this line is part of the output. That might not be too difficult

Alternatively I could try to add logic that says every "do" must be paired with a method i.e. do; end is not valid syntax you need thing do; end, this is tricky because right now code lines only know about themselves while trailing do can be on a newline

Dir.chdir("/tmp") \
do
end

Handling these cases with the current implementation would be more difficult. It would be easier to handle this special case as a pre/post processing step.

It now returns:

   2  RSpec.describe TelehealthAppointment, type: :model do
   3    describe "#participants_state" do
   4      context "timezones workaround" do
   5        it "should receive a time in UTC format and return the time with the"\
❯  6          "office's UTC offset substracted from it" do
  10        end
  11      end
  12    end
  18  end

Which is still wrong, but it's a different wrong

Update, this is not an issue because Foo.call "a", \"b", is not syntatical valid due to the trailing comma

You can have a trailing do without a \

Foo.call "a",
  "b",
  "c" do
end
Syntax OK

Possibility to detect trailing do: appending an end and seeing if it becomes valid.

  • Yes: Not a trailing do
  • No: Needs more than an end, might be missing the initial on_ident
  "c" do ;  end # Still invalid even with an end