emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] [PATCH 1/3] ob-table: Fix org-sbe's handling of quotes in argume


From: Vladimir Panteleev
Subject: Re: [O] [PATCH 1/3] ob-table: Fix org-sbe's handling of quotes in arguments
Date: Wed, 14 Mar 2018 16:23:58 +0000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0

On 2018-03-14 15:00, Nicolas Goaziou wrote:
Vladimir Panteleev <address@hidden> 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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]