You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@zeppelin.apache.org by "Sven (JIRA)" <ji...@apache.org> on 2016/03/10 00:12:40 UTC

[jira] [Created] (ZEPPELIN-731) Invalid cursor position passed to auto-completion if %interpreter is given explicitly.

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)