]> code.delx.au - gnu-emacs-elpa/blobdiff - TODO
(sml-backward-sexp, sml-forward-sexp): Remove unused var.
[gnu-emacs-elpa] / TODO
diff --git a/TODO b/TODO
index 9b04bad2721fee451f0a9717401b86f363e0145e..19cd7516ddf100bfd8774ecc747a64d1c01b0f58 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,99 +1,46 @@
--*- sml -*-
+
+* improve M-C-f and M-C-b (they too often don't do the right thing) and
+  add M-C-k and other such sexp-chunked operations.
 
 * if indentation is non-obvious, return a list of possible indentations
   and choose the first unless the current is one of the possible choices.
 
+* make `M-x sml-compile' more generic.
+
+* allow specifying indentation of dependent keywords (how to indent `in'
+  relative to `let', for example).
+
+* use symbols instead of strings for `sym'.
+
 * ignore warnings in C-x ` ????
 
-* improve the run-sml to allow running on another machine and to take args
-
-* allow right-aligning "and" with its correspondant.
-
-* sample problematic indentations:
-
-let fun toStringFKind {isrec,cconv,inline,...} =
-       (if isSome isrec then "R" else "")^
-       (if cconv = F.CC_FCT then "FCT" else "FUN")^
-       (foo)
-       
-      | toStringFKind =
-       let fun cfun (fk,f,args,body) = let 
-           in (fk, f, args, loop body)
-           end
-           fun foo x = let
-             val 
-           in 
-             
-             let f
-             in if 2 then
-                  ~3
-                else 
-                  asdf
-             end
-                 
-                 (
-                  if foo then 1 else 2;
-                  ())
-           end
-       end
-      | toStringFKind =
-       let bla
-       in foooooooooo;
-          faaaaaaaaaaa
-       end
-           
-           
-           let bla
-           in (fn toto => 1,
-               fn tata => 2)
-           end
-           
-           let
-           in clet1 (fn [nv] => (Conlv, nv, ndc),
-                     fn ([nv],nle) => F.CON(dcon, tycs, nv, lv, nle))
-                    (lv,[v],le)
-           end
-           
-           let
-           in a d
-                awsdfg
-                sadf
-                (fn bla =>
-                    gfsse
-                  | ss => 
-                    asdf)
-           end
-           (* sadgasgf *) 
-           app (fn (fk,f,args,body as F.APP(F.VAR g,vs)) =>
-                   if not C.escaping f
-                      orelse vs = (map (F.VAR o #1) args) andalso
-                             not (C.escaping g)
-                   then
-                     let val g = F.VAR g
-                     in substitute(f, val2sval g, g)
-                     end
-                     handle NotFound =>
-                            addbind (f, Fun(f, body, args, fk, od))
-                   else addbind (f, Fun(f, body, args, fk, od))
-                 | (fk,f,args,body) =>
-                   addbind (f, Fun(f, body, args, fk, od)))
-           
-           (if 1 then 1 + 2 else if
-              1 then
-              1
-              + df
-            else
-              hell
-                  de
-                  der
-                  +1)
-           
-           case
-             case a of
-                2 =>
-                1
-                + 2
-              |  => 
-            of 1 =>
-               sd
-             |  => 
+* recognize irrefutable patterns (with "Capital"-heuristics, for example:
+  a regexp like "\\([(),]\\|[_a-z][_a-z0-9]*\\)+").
+  This can then be used to allow indenting like
+
+               (fn x =>
+                some expressions)
+
+* take advantage of text after-the-line (when available) for indentation.
+
+* obey fixity directives.
+
+* dangling `case e' in stuff like
+
+  fun myfunction x = case x
+   of bla =>
+    | bli =>
+
+* deal with CPS kind of code ???
+
+  function1 (arg1, arg2, fn v1 =>
+  function2 (arg2, fn v2 =>
+  function3 (arg5, arg3, arg8, fn v3 =>
+  function4 (v1, v2, v3))))
+
+  or even just
+
+  F.LET (v1, foo,
+  F.LET (v2, bar,
+  F.LET (v3, baz,
+  F.RET [v1, v2, v3])))