Sven created ZEPPELIN-731:
-----------------------------

             Summary: Invalid cursor position passed to auto-completion if 
%interpreter is given explicitly.
                 Key: ZEPPELIN-731
                 URL: https://issues.apache.org/jira/browse/ZEPPELIN-731
             Project: Zeppelin
          Issue Type: Bug
          Components: Core, Interpreters
    Affects Versions: 0.5.6, 0.6.0
         Environment: Ubuntu, Firefox
            Reporter: Sven


h3. The bug
Consider the following notebook-command:
{noformat}"%interpreter          TextAfter10Spaces     "{noformat}
with the cursor placed directly between "Text" and "After".
Pressing Ctrl + . (for auto-complete) passes the following values to the method 
_Interpreter.completion(String buf, int cursor)_:
{{buffer = "TextAfter10Spaces"}} // i.e., the *trimmed* string without 
leading/trailing spaces
{{cursor = 14}} // i.e., cursor position referring to the original *untrimmed* 
string

For that reason it is impossible to determine the correct cursor position in 
the passed buffer, since we have no access to the number of trimmed spaces 
(which is usually = 1)

If no interpreter name is given (taking the default interpreter), then the 
behaviour is different and correct:
{noformat}commandline = "          TextAfter10Spaces     "{noformat}
{noformat}buffer = "          TextAfter10Spaces     "{noformat} // i.e., the 
complete, untrimmed string
{{cursor = 14}} // i.e., correctly referring to the untrimmed string

h3. The solution
The solution would be to always pass the full, non-trimmed substring that 
follows directly the %interpretermark.
This would in particular give the intuitive guarantee that {{cursor <= 
buffer.length()}} holds always true.

h3. Try it yourself
I stumbled upon this on writing my own interpreter, but you can also test it by 
adding the following lines to _SparkInterpreter.java_ directly after _public 
List<String> completion(String buf, int cursor)_:

{noformat}
 javax.swing.JOptionPane.showMessageDialog(null, 
      "buffer: " + buf + " (" + buf.length() + ")\ncursor:" + cursor);
{noformat}

Then a Swing message window pops up whenever you type Ctrl + .



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to