Search in sources :

Example 11 with AceEditor

use of org.rstudio.studio.client.workbench.views.source.editors.text.AceEditor in project rstudio by rstudio.

the class SignatureToolTipManager method resolveActiveFunctionAndDisplayToolTip.

public void resolveActiveFunctionAndDisplayToolTip() {
    if (suppressed_) {
        suppressed_ = false;
        return;
    }
    if (docDisplay_.isPopupVisible())
        return;
    AceEditor editor = (AceEditor) docDisplay_;
    if (editor == null)
        return;
    final Position position = getLookupPosition();
    final boolean isMouseEvent = isMouseDrivenEvent();
    // Ensure that the mouse target is actually the active editor
    if (isMouseEvent) {
        Element el = DomUtils.elementFromPoint(coordinates_.getMouseX(), coordinates_.getMouseY());
        AceEditorNative nativeEditor = AceEditorNative.getEditor(el);
        if (nativeEditor != null && nativeEditor != editor.getWidget().getEditor())
            return;
    }
    // and then later moves the mouse away)
    if (isMouseEvent)
        toolTip_.hide();
    TokenCursor cursor = editor.getSession().getMode().getRCodeModel().getTokenCursor();
    if (!cursor.moveToPosition(position, true))
        return;
    // position is not changed.
    if (!isMouseEvent && uiPrefs_.showFunctionTooltipOnIdle().getGlobalValue() && !cursor.valueEquals("(")) {
        cursor.findOpeningBracket("(", false);
    }
    Token lookahead = cursor.peekFwd(1);
    if (lookahead.valueEquals("::") || lookahead.valueEquals(":::"))
        if (!cursor.moveToNextToken())
            return;
    if (cursor.valueEquals("::") || cursor.valueEquals(":::"))
        if (!cursor.moveToNextToken())
            return;
    if (cursor.valueEquals("("))
        if (!cursor.moveToPreviousToken())
            return;
    // then bail.
    if (toolTip_.isShowing() && cursor.currentPosition().isEqualTo(completionPosition_)) {
        return;
    }
    completionPosition_ = cursor.currentPosition();
    // be an opening paren.
    if (!cursor.hasType("identifier"))
        return;
    if (!cursor.nextValue().equals("("))
        return;
    String callString = cursor.currentValue();
    if (isBoringFunction(callString))
        return;
    // If this is a namespaced function call, then append that context.
    Token lookbehind = cursor.peekBwd(1);
    if (lookbehind.valueEquals("::") || lookbehind.valueEquals(":::")) {
        // Do-while loop just to allow 'break' for control flow
        do {
            TokenCursor clone = cursor.cloneCursor();
            if (!clone.moveToPreviousToken())
                break;
            if (!clone.moveToPreviousToken())
                break;
            if (!clone.hasType("identifier"))
                break;
            callString = clone.currentValue() + "::" + callString;
        } while (false);
    }
    // Set anchor (so we can dismiss popup when cursor moves outside
    // of anchored region)
    setAnchor(cursor.cloneCursor());
    final String fnString = callString;
    server_.getArgs(fnString, "", "", new ServerRequestCallback<String>() {

        @Override
        public void onResponseReceived(String arguments) {
            if (StringUtil.isNullOrEmpty(arguments))
                return;
            final String signature = fnString + arguments;
            resolvePositionAndShow(signature, position);
        }

        @Override
        public void onError(ServerError error) {
            Debug.logError(error);
        }
    });
}
Also used : AceEditorNative(org.rstudio.studio.client.workbench.views.source.editors.text.ace.AceEditorNative) TokenCursor(org.rstudio.studio.client.workbench.views.source.editors.text.ace.TokenCursor) Position(org.rstudio.studio.client.workbench.views.source.editors.text.ace.Position) ServerError(org.rstudio.studio.client.server.ServerError) Element(com.google.gwt.dom.client.Element) AceEditor(org.rstudio.studio.client.workbench.views.source.editors.text.AceEditor) Token(org.rstudio.studio.client.workbench.views.source.editors.text.ace.Token)

Aggregations

AceEditor (org.rstudio.studio.client.workbench.views.source.editors.text.AceEditor)11 CodeModel (org.rstudio.studio.client.workbench.views.source.editors.text.ace.CodeModel)6 Position (org.rstudio.studio.client.workbench.views.source.editors.text.ace.Position)6 TokenCursor (org.rstudio.studio.client.workbench.views.source.editors.text.ace.TokenCursor)6 JsArrayString (com.google.gwt.core.client.JsArrayString)3 InputEditorLineWithCursorPosition (org.rstudio.studio.client.workbench.views.console.shell.editor.InputEditorLineWithCursorPosition)3 SourcePosition (org.rstudio.studio.client.workbench.views.source.model.SourcePosition)3 ServerError (org.rstudio.studio.client.server.ServerError)2 InputEditorPosition (org.rstudio.studio.client.workbench.views.console.shell.editor.InputEditorPosition)2 ScopeFunction (org.rstudio.studio.client.workbench.views.source.editors.text.ScopeFunction)2 Token (org.rstudio.studio.client.workbench.views.source.editors.text.ace.Token)2 Element (com.google.gwt.dom.client.Element)1 ChangeEvent (com.google.gwt.event.dom.client.ChangeEvent)1 ChangeHandler (com.google.gwt.event.dom.client.ChangeHandler)1 ValueChangeEvent (com.google.gwt.event.logical.shared.ValueChangeEvent)1 ValueChangeHandler (com.google.gwt.event.logical.shared.ValueChangeHandler)1 DockLayoutPanel (com.google.gwt.user.client.ui.DockLayoutPanel)1 SimplePanel (com.google.gwt.user.client.ui.SimplePanel)1 Size (org.rstudio.core.client.Size)1 FileSystemItem (org.rstudio.core.client.files.FileSystemItem)1