/* * Scope.java * * Copyright (C) 2009-12 by RStudio, Inc. * * Unless you have received this program directly from RStudio pursuant * to the terms of a commercial license agreement with RStudio, then * this program is licensed to you under the terms of version 3 of the * GNU Affero General Public License. This program is distributed WITHOUT * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT, * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details. * */ package org.rstudio.studio.client.workbench.views.source.editors.text; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.core.client.JsArray; import org.rstudio.studio.client.workbench.views.source.editors.text.ace.Position; public class Scope extends JavaScriptObject { protected Scope() {} public static final native Scope createRScopeNode(String label, Position start, Position end, int scopeType) /*-{ var ScopeNode = $wnd.require("mode/r_scope_tree").ScopeNode; var node = new ScopeNode(label, start, start, scopeType); node.end = end; return node; }-*/; public native final String getLabel() /*-{ return this.label; }-*/; public native final boolean isTopLevel() /*-{ return this.isRoot(); }-*/; public native final boolean isBrace() /*-{ return this.isBrace(); }-*/; public native final boolean isChunk() /*-{ return this.isChunk(); }-*/; public native final boolean isSection() /*-{ return this.isSection(); }-*/; public native final boolean isFunction() /*-{ return this.isFunction(); }-*/; public native final Scope getParentScope() /*-{ return this.parentScope; }-*/; /** * For named functions, the preamble points to the beginning of the function * declaration, including function name. For chunks, it points to the * beginning of the chunk itself. For other scopes, it just points to the * opening brace (same as getBodyStart). */ public native final Position getPreamble() /*-{ return this.preamble; }-*/; /** * Points to the start of the body of the scope. Note that for named * functions, chunks, and sections, this is different than the preamble. */ public native final Position getBodyStart() /*-{ return this.start; }-*/; /** * Points to the part of a scope where a fold would begin. */ public final Position getFoldStart() { if (isFunction()) return getBodyStart(); else return getPreamble(); } public native final Position getEnd() /*-{ return this.end; }-*/; public native final JsArray<Scope> getChildren() /*-{ return this.$children; }-*/; public native final String getChunkLabel() /*-{ return this.chunkLabel; }-*/; public native final boolean isClass() /*-{ return typeof this.isClass !== "undefined" && this.isClass(); }-*/; public native final boolean isNamespace() /*-{ return typeof this.isNamespace !== "undefined" && this.isNamespace(); }-*/; public native final boolean isLambda() /*-{ return typeof this.isLambda !== "undefined" && this.isLambda(); }-*/; public native final boolean isAnon() /*-{ return typeof this.isAnon !== "undefined" && this.isAnon(); }-*/; public native final boolean isMarkdownHeader() /*-{ return this.attributes && this.attributes.isMarkdown === true; }-*/; public native final boolean isYaml() /*-{ return this.attributes && this.attributes.isYaml === true; }-*/; public native final int getDepth() /*-{ return this.attributes && this.attributes.depth || 0; }-*/; public static final int SCOPE_TYPE_ROOT = 1; public static final int SCOPE_TYPE_BRACE = 2; public static final int SCOPE_TYPE_CHUNK = 3; public static final int SCOPE_TYPE_SECTION = 4; }