@@ -3147,9 +3147,15 @@ <h3 id="replevaluatecode-deprecated"><code>repl.evaluateCode()</code> <em>(depre
31473147< h2 id ="ranges "> < code > ranges</ code > < a class ="headerlink " href ="#ranges " title ="Permanent link "> #</ a > </ h2 >
31483148< p > The < code > ranges</ code > module contains functions for retreiving < a href ="https://code.visualstudio.com/api/references/vscode-api#Range "> vscode.Range</ a > s and text for pieces of interest in a Clojure document.</ p >
31493149< p > All functions in this module have the following TypeScript signature:</ p >
3150- < div class ="highlight "> < pre > < span > </ span > < code > < span class ="p "> (</ span > < span class ="nx "> editor </ span > < span class ="w " > </ span > < span class =" o "> = </ span > < span class ="w "> </ span > < span class ="nx "> vscode</ span > < span class ="p " > . </ span > < span class ="nb " > window </ span > < span class ="p " > . </ span > < span class ="nx "> activeTextEditor </ span > < span class ="p "> , </ span > < span class ="w " > </ span > < span class =" nx "> position </ span > < span class ="w " > </ span > < span class ="o " > = </ span > < span class =" w "> </ span > < span class ="nx "> editor </ span > < span class ="o "> ? </ span > < span class ="p " > . </ span > < span class =" nx " > selection </ span > < span class ="o " > ? </ span > < span class =" p " > . </ span > < span class =" nx " > active </ span > < span class ="p "> )</ span > < span class ="w "> </ span > < span class ="p "> =></ span > < span class ="w "> </ span > < span class ="p "> [</ span > < span class ="nx "> vscode</ span > < span class ="p "> .</ span > < span class ="nx "> Range</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="kt "> string</ span > < span class ="p "> ];</ span >
3150+ < div class ="highlight "> < pre > < span > </ span > < code > < span class ="p "> (</ span > < span class ="nx "> editorOrDocument? </ span > < span class ="o "> : </ span > < span class ="w "> </ span > < span class ="kt "> vscode.TextEditor </ span > < span class ="w " > </ span > < span class ="o " > | </ span > < span class ="w " > </ span > < span class ="nx "> vscode </ span > < span class ="p "> . </ span > < span class ="nx "> TextDocument </ span > < span class ="p " > , </ span > < span class ="w "> </ span > < span class ="nx "> position? </ span > < span class ="o "> : </ span > < span class ="w " > </ span > < span class ="kt " > vscode.Position </ span > < span class ="p "> )</ span > < span class ="w "> </ span > < span class ="p "> =></ span > < span class ="w "> </ span > < span class ="p "> [</ span > < span class ="nx "> vscode</ span > < span class ="p "> .</ span > < span class ="nx "> Range</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="kt "> string</ span > < span class ="p "> ];</ span >
31513151</ code > </ pre > </ div >
3152- < p > I.e. they expect a < a href ="https://code.visualstudio.com/api/references/vscode-api#TextEditor "> vscode.TextEditor</ a > – defaulting to the currently active editor – and a < a href ="https://code.visualstudio.com/api/references/vscode-api#Position "> vscode.Position</ a > – defaulting to the current active position in the editor (or the first active position if multiple selections/positions exist, and will return a tuple with the range, and the text for the piece of interest requested.</ p >
3152+ < p > They can be called in three ways:</ p >
3153+ < ul >
3154+ < li > < strong > No arguments</ strong > : uses the active text editor’s document and cursor position.</ li >
3155+ < li > < strong > A < code > TextEditor</ code > </ strong > : uses its document and primary cursor position (or the given < code > position</ code > if provided).</ li >
3156+ < li > < strong > A < code > TextDocument</ code > + < code > Position</ code > </ strong > : uses them directly — no visible editor required. This is useful for programmatic/API usage where you have a document reference but no open editor tab.</ li >
3157+ </ ul >
3158+ < p > All variants return a tuple with the range and the text for the piece of interest requested.</ p >
31533159< div class ="admonition note ">
31543160< p class ="admonition-title "> Custom REPL Commands</ p >
31553161< p > The < code > ranges</ code > function have corresponding < a href ="../custom-commands/ "> REPL Snippets/Commands</ a > substitution variables. It is the same implementation functions used in both cases.</ p >
@@ -3172,14 +3178,23 @@ <h3 id="rangescurrenttopleveldef"><code>ranges.currentTopLevelDef()</code><a cla
31723178< p > The symbol being defined by the current top level form. NB: Will stupidly assume it is the second form. I.e. it does not check that it is an actual definition, and will often return nonsense if used in Rich comments.</ p >
31733179< p > < em > Corresponding < a href ="../custom-commands/ "> REPL Snippet</ a > variable: < code > $top-level-defined-symbol</ code > .</ em > </ p >
31743180< h3 id ="example-rangescurrenttoplevelform "> Example: < code > ranges.currentTopLevelForm()</ code > < a class ="headerlink " href ="#example-rangescurrenttoplevelform " title ="Permanent link "> #</ a > </ h3 >
3175- < div class ="tabbed-set tabbed-alternate " data-tabs ="8:3 "> < input checked ="checked " id ="__tabbed_8_1 " name ="__tabbed_8 " type ="radio " /> < input id ="__tabbed_8_2 " name ="__tabbed_8 " type ="radio " /> < input id ="__tabbed_8_3 " name ="__tabbed_8 " type ="radio " /> < div class ="tabbed-labels "> < label for ="__tabbed_8_1 "> Joyride</ label > < label for ="__tabbed_8_2 "> ClojureScript </ label > < label for ="__tabbed_8_3 "> JavaScript</ label > </ div >
3181+ < div class ="tabbed-set tabbed-alternate " data-tabs ="8:4 "> < input checked ="checked " id ="__tabbed_8_1 " name ="__tabbed_8 " type ="radio " /> < input id ="__tabbed_8_2 " name ="__tabbed_8 " type ="radio " /> < input id ="__tabbed_8_3 " name ="__tabbed_8 " type ="radio " /> < input id =" __tabbed_8_4 " name =" __tabbed_8 " type =" radio " /> < div class ="tabbed-labels "> < label for ="__tabbed_8_1 "> Joyride</ label > < label for ="__tabbed_8_2 "> Joyride (with TextDocument + Position) </ label > < label for ="__tabbed_8_3 " > ClojureScript </ label > < label for =" __tabbed_8_4 "> JavaScript</ label > </ div >
31763182< div class ="tabbed-content ">
31773183< div class ="tabbed-block ">
31783184< div class ="highlight "> < pre > < span > </ span > < code > < span class ="p "> (</ span > < span class ="k "> let </ span > < span class ="p "> [[</ span > < span class ="nb "> range </ span > < span class ="nv "> text</ span > < span class ="p "> ]</ span > < span class ="w "> </ span > < span class ="p "> (</ span > < span class ="nf "> calva/ranges.currentTopLevelForm</ span > < span class ="p "> )]</ span >
31793185< span class ="w "> </ span > < span class ="nv "> ...</ span > < span class ="p "> )</ span >
31803186</ code > </ pre > </ div >
31813187</ div >
31823188< div class ="tabbed-block ">
3189+ < div class ="highlight "> < pre > < span > </ span > < code > < span class ="c1 "> ;; Query a form without the file being open in an editor</ span >
3190+ < span class ="p "> (</ span > < span class ="nf "> p/let</ span > < span class ="w "> </ span > < span class ="p "> [</ span > < span class ="nv "> uri</ span > < span class ="w "> </ span > < span class ="p "> (</ span > < span class ="nf "> vscode/Uri.file</ span > < span class ="w "> </ span > < span class ="s "> "/path/to/file.clj"</ span > < span class ="p "> )</ span >
3191+ < span class ="w "> </ span > < span class ="nb "> doc </ span > < span class ="p "> (</ span > < span class ="nf "> vscode/workspace.openTextDocument</ span > < span class ="w "> </ span > < span class ="nv "> uri</ span > < span class ="p "> )</ span >
3192+ < span class ="w "> </ span > < span class ="nv "> pos</ span > < span class ="w "> </ span > < span class ="p "> (</ span > < span class ="nf "> vscode/Position.</ span > < span class ="w "> </ span > < span class ="mi "> 5</ span > < span class ="w "> </ span > < span class ="mi "> 0</ span > < span class ="p "> )</ span >
3193+ < span class ="w "> </ span > < span class ="p "> [</ span > < span class ="nb "> range </ span > < span class ="nv "> text</ span > < span class ="p "> ]</ span > < span class ="w "> </ span > < span class ="p "> (</ span > < span class ="nf "> calva/ranges.currentTopLevelForm</ span > < span class ="w "> </ span > < span class ="nb "> doc </ span > < span class ="nv "> pos</ span > < span class ="p "> )]</ span >
3194+ < span class ="w "> </ span > < span class ="p "> (</ span > < span class ="nb "> println </ span > < span class ="s "> "Form at line 5:"</ span > < span class ="w "> </ span > < span class ="nv "> text</ span > < span class ="p "> ))</ span >
3195+ </ code > </ pre > </ div >
3196+ </ div >
3197+ < div class ="tabbed-block ">
31833198< div class ="highlight "> < pre > < span > </ span > < code > < span class ="p "> (</ span > < span class ="k "> let </ span > < span class ="p "> [[</ span > < span class ="nb "> range </ span > < span class ="nv "> text</ span > < span class ="p "> ]</ span > < span class ="w "> </ span > < span class ="p "> ((</ span > < span class ="nf "> get-in</ span > < span class ="w "> </ span > < span class ="p "> [</ span > < span class ="ss "> :ranges</ span > < span class ="w "> </ span > < span class ="ss "> :currentTopLevelForm</ span > < span class ="p "> ]))]</ span >
31843199< span class ="w "> </ span > < span class ="nv "> ...</ span > < span class ="p "> )</ span >
31853200</ code > </ pre > </ div >
@@ -3193,13 +3208,14 @@ <h3 id="example-rangescurrenttoplevelform">Example: <code>ranges.currentTopLevel
31933208< h2 id ="editor "> < code > editor</ code > < a class ="headerlink " href ="#editor " title ="Permanent link "> #</ a > </ h2 >
31943209< p > The < code > editor</ code > module has facilites (well, a facility, so far) for editing Clojure documents.</ p >
31953210< h3 id ="editorreplace "> < code > editor.replace()</ code > < a class ="headerlink " href ="#editorreplace " title ="Permanent link "> #</ a > </ h3 >
3196- < p > With < code > editor.replace()</ code > you can replace a range in a Clojure editor with new text. The arguments are:</ p >
3211+ < p > With < code > editor.replace()</ code > you can replace a range in a Clojure document with new text. The arguments are:</ p >
31973212< ul >
3198- < li > < code > editor </ code > , a < code > vscode.TextEditor</ code > </ li >
3213+ < li > < code > editorOrDocument </ code > , a < code > vscode.TextEditor</ code > or a < code > vscode.TextDocument </ code > </ li >
31993214< li > < code > range</ code > , a < code > vscode.Range</ code > </ li >
32003215< li > < code > newText</ code > , a string</ li >
32013216</ ul >
3202- < div class ="tabbed-set tabbed-alternate " data-tabs ="9:2 "> < input checked ="checked " id ="__tabbed_9_1 " name ="__tabbed_9 " type ="radio " /> < input id ="__tabbed_9_2 " name ="__tabbed_9 " type ="radio " /> < div class ="tabbed-labels "> < label for ="__tabbed_9_1 "> Joyride</ label > < label for ="__tabbed_9_2 "> JavaScript</ label > </ div >
3217+ < p > When a < code > TextEditor</ code > is provided, the edit uses < code > TextEditor.edit()</ code > with undo grouping and formatting. When a < code > TextDocument</ code > is provided, the edit uses < code > WorkspaceEdit</ code > — no visible editor is required, making it suitable for programmatic edits from other extensions.</ p >
3218+ < div class ="tabbed-set tabbed-alternate " data-tabs ="9:3 "> < input checked ="checked " id ="__tabbed_9_1 " name ="__tabbed_9 " type ="radio " /> < input id ="__tabbed_9_2 " name ="__tabbed_9 " type ="radio " /> < input id ="__tabbed_9_3 " name ="__tabbed_9 " type ="radio " /> < div class ="tabbed-labels "> < label for ="__tabbed_9_1 "> Joyride</ label > < label for ="__tabbed_9_2 "> Joyride (editor-free)</ label > < label for ="__tabbed_9_3 "> JavaScript</ label > </ div >
32033219< div class ="tabbed-content ">
32043220< div class ="tabbed-block ">
32053221< div class ="highlight "> < pre > < span > </ span > < code > < span class ="p "> (</ span > < span class ="nb "> -> </ span > < span class ="p "> (</ span > < span class ="nf "> p/let</ span > < span class ="w "> </ span > < span class ="p "> [</ span > < span class ="nv "> top-level-form-range</ span > < span class ="w "> </ span > < span class ="p "> (</ span > < span class ="nb "> first </ span > < span class ="p "> (</ span > < span class ="nf "> calva/ranges.currentTopLevelForm</ span > < span class ="p "> ))</ span >
@@ -3210,6 +3226,17 @@ <h3 id="editorreplace"><code>editor.replace()</code><a class="headerlink" href="
32103226</ code > </ pre > </ div >
32113227</ div >
32123228< div class ="tabbed-block ">
3229+ < div class ="highlight "> < pre > < span > </ span > < code > < span class ="c1 "> ;; Edit a document without opening it in an editor</ span >
3230+ < span class ="p "> (</ span > < span class ="nb "> -> </ span > < span class ="p "> (</ span > < span class ="nf "> p/let</ span > < span class ="w "> </ span > < span class ="p "> [</ span > < span class ="nv "> uri</ span > < span class ="w "> </ span > < span class ="p "> (</ span > < span class ="nf "> vscode/Uri.file</ span > < span class ="w "> </ span > < span class ="s "> "/path/to/file.clj"</ span > < span class ="p "> )</ span >
3231+ < span class ="w "> </ span > < span class ="nb "> doc </ span > < span class ="p "> (</ span > < span class ="nf "> vscode/workspace.openTextDocument</ span > < span class ="w "> </ span > < span class ="nv "> uri</ span > < span class ="p "> )</ span >
3232+ < span class ="w "> </ span > < span class ="nb "> range </ span > < span class ="p "> (</ span > < span class ="nf "> vscode/Range.</ span > < span class ="w "> </ span > < span class ="p "> (</ span > < span class ="nf "> vscode/Position.</ span > < span class ="w "> </ span > < span class ="mi "> 2</ span > < span class ="w "> </ span > < span class ="mi "> 0</ span > < span class ="p "> )</ span > < span class ="w "> </ span > < span class ="p "> (</ span > < span class ="nf "> vscode/Position.</ span > < span class ="w "> </ span > < span class ="mi "> 2</ span > < span class ="w "> </ span > < span class ="mi "> 9</ span > < span class ="p "> ))</ span >
3233+ < span class ="w "> </ span > < span class ="nv "> _</ span > < span class ="w "> </ span > < span class ="p "> (</ span > < span class ="nf "> calva/editor.replace</ span > < span class ="w "> </ span > < span class ="nb "> doc range </ span > < span class ="s "> "(def a 42)"</ span > < span class ="p "> )]</ span >
3234+ < span class ="w "> </ span > < span class ="p "> (</ span > < span class ="nb "> println </ span > < span class ="s "> "Text replaced without opening an editor!"</ span > < span class ="p "> ))</ span >
3235+ < span class ="w "> </ span > < span class ="p "> (</ span > < span class ="nf "> p/catch</ span > < span class ="w "> </ span > < span class ="p "> (</ span > < span class ="k "> fn </ span > < span class ="p "> [</ span > < span class ="nv "> e</ span > < span class ="p "> ]</ span >
3236+ < span class ="w "> </ span > < span class ="p "> (</ span > < span class ="nb "> println </ span > < span class ="s "> "Error replacing text:"</ span > < span class ="w "> </ span > < span class ="nv "> e</ span > < span class ="p "> ))))</ span >
3237+ </ code > </ pre > </ div >
3238+ </ div >
3239+ < div class ="tabbed-block ">
32133240< div class ="highlight "> < pre > < span > </ span > < code > < span class ="kd "> const</ span > < span class ="w "> </ span > < span class ="nx "> topLevelRange</ span > < span class ="w "> </ span > < span class ="o "> =</ span > < span class ="w "> </ span > < span class ="nx "> calvaApi</ span > < span class ="p "> .</ span > < span class ="nx "> ranges</ span > < span class ="p "> .</ span > < span class ="nx "> currentTopLevelForm</ span > < span class ="p "> ();</ span >
32143241< span class ="nx "> calva</ span > < span class ="p "> .</ span > < span class ="nx "> editor</ span > < span class ="p "> .</ span > < span class ="nx "> replace</ span > < span class ="p "> (</ span > < span class ="nx "> topLevelRange</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="s2 "> "Some new text"</ span > < span class ="p "> )</ span >
32153242< span class ="w "> </ span > < span class ="p "> .</ span > < span class ="nx "> then</ span > < span class ="p "> ((</ span > < span class ="nx "> _</ span > < span class ="p "> )</ span > < span class ="w "> </ span > < span class ="p "> =></ span > < span class ="w "> </ span > < span class ="nx "> console</ span > < span class ="p "> .</ span > < span class ="nx "> log</ span > < span class ="p "> (</ span > < span class ="s2 "> "Text replaced!"</ span > < span class ="p "> ))</ span >
0 commit comments