Christophe Weblog Wiki Code Publications Music
implement `swank:operator-arglist` properly
authorChristophe Rhodes <csr21@cantab.net>
Tue, 24 Apr 2012 12:38:09 +0000 (13:38 +0100)
committerChristophe Rhodes <csr21@cantab.net>
Tue, 24 Apr 2012 12:38:09 +0000 (13:38 +0100)
Now that slime-operator-at-point is overrideable, I can even test this
from within Emacs -- but thanks to Philipp Marek for implementing this
in his SLIMV-based environment first.

swank.R

diff --git a/swank.R b/swank.R
index d91c35fdbd3663c3d8312a2a204a3e6a0ec73af7..49f73fff2b1dd3e61e4294140a03f31f727252a0 100644 (file)
--- a/swank.R
+++ b/swank.R
@@ -348,7 +348,16 @@ sendReplResultFunction <- sendReplResult
 }
 
 `swank:operator-arglist` <- function(slimeConnection, sldbState, op, package) {
-  list()
+  if(!exists(op, envir = globalenv())) {
+    return(list())
+  }
+  funoid <- get(op, envir = globalenv())
+  if(is.function(funoid)) {
+    args <- formals(funoid)
+    paste(sprintf("%s=%s", names(args), args), collapse=", ")
+  } else {
+    list()
+  }
 }
 
 `swank:throw-to-toplevel` <- function(slimeConnection, sldbState) {