On 2018-03-14 15:00, Nicolas Goaziou wrote:
Vladimir Panteleev <thecybersha...@gmail.com> writes:
I wrote about this in the cover letter too. $"foo" and $ "foo" are
both the same thing.
Just to make it clear: I read the cover letter. My confusion doesn't
come from the fact I may not have read it.
In that case, I need to apologize for not making it sufficiently clear,
as we're reiterating the same points without making much progress.
I disagree. You are testing an implementation detail here: the fact that
"$" is not necessarily a prefix. According to the docstring, it should
be, so the test should use that, too. What if we rewrite `org-sbe' at
some point?
I'm sorry if I didn't explain it properly in my previous messages. I'll
try again.
The fact that $"foo" and $ "foo" mean the same thing is not an
implementation detail of org-sbe. It is a consequence of Emacs Lisp grammar.
Try evaluating '($"foo") and '($ "foo") in M-:. You will get the same
result, because after tokenization, their representation is identical.
The whitespace between $ and "foo" is completely insignificant.
In fact, if you try to evaluate $"foo" by itself, you will get "Trailing
garbage following expression", because, as I mentioned before, $ and
"foo" are two distinct tokens.
There is absolutely nothing that anyone could change in org-sbe that
would make $ "foo" mean something other than $"foo".
So, whether the test case has a space between $ and "a\"b\"c" is as
relevant as whether it has comments, or uses tabs instead of spaces for
indentation.
I hope this explanation can put this issue to rest.
The same goes for the next string. $"foo", or in your case, $"a\"b\"c"
means nothing in `org-sbe' context. A reference should follow the dollar
character, per `org-sbe' docstring. I suggest to make an equivalent test
with, e.g., $"@1$1", where @1$1 refers to a field containing "a\"b\"c"
or some such.
As I've mentioned, table references are resolved before org-sbe is
invoked. By the time org-sbe begins executing, all table references will
have already been replaced by string literals. Using a table reference
confounds the matter because it is testing more than just org-sbe.
org-sbe's docstring is misleading: $ is not a way to quote just table
references, but any string literals in general. Had it been otherwise
(i.e. $-prefixing being part of the table reference syntax), there would
be no way to pass a string literal (which isn't an interpolated table
cell value) to the indicated function. The doc string should probably be
improved in this regard.
Adding a test which uses a table reference instead of a string literal
won't hurt, but it would be testing several layers at once, and,
assuming cell value interpolation into emacs lisp table formulas is
already tested somewhere else, superfluous.
--
Best regards,
Vladimir