]> gitweb.factorcode.org Git - factor.git/commitdiff
Re-organize some error-related code, three-pane look for compiler errors tool, add...
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Thu, 9 Apr 2009 04:05:45 +0000 (23:05 -0500)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Thu, 9 Apr 2009 04:05:45 +0000 (23:05 -0500)
13 files changed:
basis/debugger/debugger.factor
basis/editors/editors.factor
basis/stack-checker/errors/prettyprint/prettyprint.factor
basis/ui/tools/browser/browser.factor
basis/ui/tools/compiler-errors/compiler-errors.factor
basis/ui/tools/debugger/debugger.factor
basis/ui/tools/error-list/icons/compiler-error.tiff [new file with mode: 0644]
basis/ui/tools/error-list/icons/compiler-warning.tiff [new file with mode: 0644]
basis/ui/tools/error-list/icons/help-lint-error.tiff [new file with mode: 0644]
basis/ui/tools/error-list/icons/note.tiff [new file with mode: 0644]
basis/ui/tools/error-list/icons/syntax-error.tiff [new file with mode: 0644]
basis/ui/tools/error-list/icons/unit-test-error.tiff [new file with mode: 0644]
basis/ui/tools/operations/operations.factor

index fd7696576b9d8f7a5b8460e4b73630d5a3f6d60c..04f43043b5f987e57cad0bb3eb9f1448515547dd 100644 (file)
@@ -309,7 +309,7 @@ M: lexer-error compute-restarts
 M: lexer-error error-help
     error>> error-help ;
 
-M: object compiler-error. ( error -- )
+M: compiler-error compiler-error. ( error -- )
     [
         [
             [
@@ -324,6 +324,8 @@ M: object compiler-error. ( error -- )
         ] bi format nl
     ] [ error>> error. ] bi ;
 
+M: compiler-error error. compiler-error. ;
+
 M: bad-effect summary
     drop "Bad stack effect declaration" ;
 
index 0003b508fb2c6903aad9e5532e3a2777d1d98bab..327cdea3c11a10ca4fa6727ad209d5e7a08da521 100644 (file)
@@ -81,6 +81,9 @@ M: object error-line
 : :edit ( -- )
     error get (:edit) ;
 
+: edit-error ( error -- )
+    [ file>> ] [ line#>> ] bi edit-location ;
+
 : edit-each ( seq -- )
     [
         [ "Editing " write . ]
index a71af74871405d19414f8614e78d2a3dad2b7e2a..c111f3bb9f4c66ddfedd8dd4599a47e2d42fa2f2 100644 (file)
@@ -1,7 +1,7 @@
-! Copyright (C) 2008 Slava Pestov.
+! Copyright (C) 2008, 2009 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors kernel prettyprint io debugger
-sequences assocs stack-checker.errors summary effects ;
+sequences assocs stack-checker.errors summary effects make ;
 IN: stack-checker.errors.prettyprint
 
 M: inference-error summary error>> summary ;
@@ -11,11 +11,16 @@ M: inference-error error-help error>> error-help ;
 M: inference-error error.
     [ word>> [ "In word: " write . ] when* ] [ error>> error. ] bi ;
 
-M: literal-expected error.
-    "Got a computed value where a " write what>> write " was expected" print ;
+M: literal-expected summary
+    [ "Got a computed value where a " % what>> % " was expected" % ] "" make ;
+
+M: literal-expected error. summary print ;
+
+M: unbalanced-branches-error summary
+    drop "Unbalanced branches" ;
 
 M: unbalanced-branches-error error.
-    "Unbalanced branches:" print
+    dup summary print
     [ quots>> ] [ branches>> [ length <effect> ] { } assoc>map ] bi zip
     [ [ first pprint-short bl ] [ second effect>string print ] bi ] each ;
 
@@ -27,16 +32,18 @@ M: too-many-r> summary
     drop
     "Quotation pops retain stack elements which it did not push" ;
 
-M: missing-effect error.
-    "The word " write
-    word>> pprint
-    " must declare a stack effect" print ;
+M: missing-effect summary
+    [
+        "The word " %
+        word>> name>> %
+        " must declare a stack effect" %
+    ] "" make ;
 
-M: effect-error error.
-    "Stack effects of the word " write
-    [ word>> pprint " do not match." print ]
-    [ "Inferred: " write inferred>> . ]
-    [ "Declared: " write declared>> . ] tri ;
+M: effect-error summary
+    [
+        "Stack effect declaration of the word  " %
+        word>> name>> % " is wrong" %
+    ] "" make ;
 
 M: recursive-quotation-error error.
     "The quotation " write
@@ -44,26 +51,31 @@ M: recursive-quotation-error error.
     " calls itself." print
     "Stack effect inference is undecidable when quotation-level recursion is permitted." print ;
 
-M: undeclared-recursion-error error.
-    "The inline recursive word " write
-    word>> pprint
-    " must be declared recursive" print ;
+M: undeclared-recursion-error summary
+    drop
+    "Inline recursive words must be declared recursive" ;
 
-M: diverging-recursion-error error.
-    "The recursive word " write
-    word>> pprint
-    " digs arbitrarily deep into the stack" print ;
+M: diverging-recursion-error summary
+    [
+        "The recursive word " %
+        word>> name>> %
+        " digs arbitrarily deep into the stack" %
+    ] "" make ;
 
-M: unbalanced-recursion-error error.
-    "The recursive word " write
-    word>> pprint
-    " leaves with the stack having the wrong height" print ;
+M: unbalanced-recursion-error summary
+    [
+        "The recursive word " %
+        word>> name>> %
+        " leaves with the stack having the wrong height" %
+    ] "" make ;
 
-M: inconsistent-recursive-call-error error.
-    "The recursive word " write
-    word>> pprint
-    " calls itself with a different set of quotation parameters than were input" print ;
+M: inconsistent-recursive-call-error summary
+    [
+        "The recursive word " %
+        word>> name>> %
+        " calls itself with a different set of quotation parameters than were input" %
+    ] "" make ;
 
-M: unknown-primitive-error error.
+M: unknown-primitive-error summary
     drop
-    "Cannot determine stack effect statically" print ;
+    "Cannot determine stack effect statically" ;
index 0c6e1fe05a5b34f111bd4d4bd13c2c8492f69433..a493d5d7d2d8cadd4f6c511b24e57715849116be 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2006, 2009 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: debugger help help.topics help.crossref help.home kernel models
+USING: debugger classes help help.topics help.crossref help.home kernel models
 compiler.units assocs words vocabs accessors fry arrays
 combinators.short-circuit namespaces sequences models help.apropos
 combinators ui ui.commands ui.gadgets ui.gadgets.panes
@@ -91,6 +91,10 @@ M: browser-gadget focusable-child* search-field>> ;
 : browser-window ( -- )
     "help.home" (browser-window) ;
 
+: error-help-window ( error -- )
+    [ error-help ]
+    [ dup tuple? [ class ] [ drop "errors" ] if ] bi or (browser-window) ;
+
 \ browser-window H{ { +nullary+ t } } define-command
 
 : com-browse ( link -- )
index 6efb5586ba2a95f668342557fcec688b12073ccc..45eb3dee5be77eb23984109fdaa71f8b4ea648a8 100644 (file)
@@ -1,14 +1,18 @@
 ! Copyright (C) 2009 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors arrays sequences sorting assocs colors.constants combinators
-combinators.smart compiler.errors compiler.units fonts kernel io.pathnames
-math.parser math.order models models.arrow namespaces summary ui
-ui.commands ui.gadgets ui.gadgets.tables ui.gadgets.tracks
-ui.gestures ui.operations ui.tools.browser ui.tools.common
-ui.gadgets.scrollers ;
+USING: accessors arrays sequences sorting assocs colors.constants
+combinators combinators.smart combinators.short-circuit editors
+compiler.errors compiler.units fonts kernel io.pathnames
+stack-checker.errors math.parser math.order models models.arrow
+models.search debugger namespaces summary locals ui ui.commands
+ui.gadgets ui.gadgets.panes ui.gadgets.tables ui.gadgets.labeled
+ui.gadgets.tracks ui.gestures ui.operations ui.tools.browser
+ui.tools.common ui.gadgets.scrollers ui.tools.inspector
+ui.gadgets.status-bar ui.operations ui.gadgets.buttons
+ui.gadgets.borders ui.images ;
 IN: ui.tools.compiler-errors
 
-TUPLE: error-list-gadget < tool table ;
+TUPLE: error-list-gadget < tool source-file error source-file-table error-table error-display ;
 
 SINGLETON: source-file-renderer
 
@@ -16,60 +20,133 @@ M: source-file-renderer row-columns
     drop [ first2 length number>string 2array ] [ { "All" "" } ] if* ;
 
 M: source-file-renderer row-value
-    drop first <pathname> ;
+    drop dup [ first <pathname> ] when ;
 
 M: source-file-renderer column-titles
     drop { "File" "Errors" } ;
 
-: <source-file-table> ( model -- table )
-    [ group-by-source-file >alist sort-keys f prefix ] <arrow>
-    source-file-renderer <table>
+M: source-file-renderer column-alignment drop { 0 1 } ;
+
+M: source-file-renderer filled-column drop 0 ;
+
+: <source-file-model> ( model -- model' )
+    [ group-by-source-file >alist sort-keys f prefix ] <arrow> ;
+
+:: <source-file-table> ( error-list -- table )
+    error-list model>> <source-file-model>
+    source-file-renderer
+    <table>
         [ invoke-primary-operation ] >>action
         COLOR: dark-gray >>column-line-color
-        { 1 f } >>column-widths
         6 >>gap
         30 >>min-rows
         30 >>max-rows
-        80 >>min-cols
-        80 >>max-cols ;
+        60 >>min-cols
+        60 >>max-cols
+        t >>selection-required?
+        error-list source-file>> >>selected-value ;
 
 SINGLETON: error-renderer
 
+GENERIC: error-icon ( error -- icon )
+
+: <error-icon> ( name -- image-name )
+    "vocab:ui/tools/error-list/icons/" ".tiff" surround <image-name> ;
+
+M: inference-error error-icon
+    type>> {
+        { +error+ [ "compiler-error" ] }
+        { +warning+ [ "compiler-warning" ] }
+    } case <error-icon> ;
+
+M: object error-icon drop "HAI" ;
+
+M: compiler-error error-icon error>> error-icon ;
+
 M: error-renderer row-columns
     drop [
         {
-            [ file>> ]
+            [ error-icon ]
             [ line#>> number>string ]
             [ word>> name>> ]
             [ error>> summary ]
         } cleave
     ] output>array ;
 
+M: error-renderer prototype-row
+    drop [ "compiler-error" <error-icon> "" "" "" ] output>array ;
+
 M: error-renderer row-value
     drop ;
 
 M: error-renderer column-titles
-    drop { "File" "Line" "Word" "Error" } ;
+    drop { "" "Line" "Word" "Error" } ;
+
+M: error-renderer column-alignment drop { 0 1 0 0 } ;
 
-: <error-table> ( model -- table )
-    [ [ [ [ file>> ] [ line#>> ] bi 2array ] compare ] sort ] <arrow>
-    error-renderer <table>
+: sort-errors ( seq -- seq' )
+    [ [ [ file>> ] [ line#>> ] bi 2array ] compare ] sort ;
+
+: <error-table-model> ( error-list -- model )
+    [ model>> [ values ] <arrow> ] [ source-file>> ] bi
+    [ swap { [ drop not ] [ [ string>> ] [ file>> ] bi* = ] } 2|| ] <search>
+    [ sort-errors ] <arrow> ;
+
+:: <error-table> ( error-list -- table )
+    error-list <error-table-model>
+    error-renderer
+    <table>
         [ invoke-primary-operation ] >>action
         COLOR: dark-gray >>column-line-color
         6 >>gap
         30 >>min-rows
         30 >>max-rows
-        80 >>min-cols
-        80 >>max-cols ;
+        60 >>min-cols
+        60 >>max-cols
+        t >>selection-required?
+        error-list error>> >>selected-value ;
+
+TUPLE: error-display < track ;
+
+: <error-display> ( error-list -- gadget )
+    vertical error-display new-track
+        add-toolbar
+        swap error>> >>model
+        dup model>> [ print-error ] <pane-control> <scroller> 1 track-add ;
+
+: com-inspect ( error-display -- )
+    model>> value>> inspector ;
+
+: com-help ( error-display -- )
+    model>> value>> error>> error-help-window ;
+
+: com-edit ( error-display -- )
+    model>> value>> edit-error ;
+
+error-display "toolbar" f {
+    { f com-inspect }
+    { f com-help }
+    { f com-edit }
+} define-command-map
 
-: <error-list-gadget> ( model -- gadget )
+:: <error-list-gadget> ( model -- gadget )
     vertical error-list-gadget new-track
-        { 3 3 } >>gap
-        swap <source-file-table> >>table
-        dup table>> <scroller> 1/2 track-add ;
+        model >>model
+        f <model> >>source-file
+        f <model> >>error
+        dup <source-file-table> >>source-file-table
+        dup <error-table> >>error-table
+        dup <error-display> >>error-display
+    :> error-list
+    error-list vertical <track>
+        { 5 5 } >>gap
+        error-list source-file-table>> <scroller> "Source files" <labeled-gadget> 1/4 track-add
+        error-list error-table>> <scroller> "Errors" <labeled-gadget> 1/2 track-add
+        error-list error-display>> "Details" <labeled-gadget> 1/4 track-add
+    { 5 5 } <filled-border> 1 track-add ;
 
 M: error-list-gadget focusable-child*
-    table>> ;
+    source-file-table>> ;
 
 : error-list-help ( -- ) "ui-error-list" com-browse ;
 
@@ -96,4 +173,4 @@ updater add-definition-observer
 
 : error-list-window ( -- )
     compiler-error-model get-global <error-list-gadget>
-    "Compiler errors" open-window ;
\ No newline at end of file
+    "Compiler errors" open-status-window ;
\ No newline at end of file
index c3ead4e3f5625f8cf55434ac295b231ac1c40c94..e1e176a8c482b2b0d4840198e14155a55b40001a 100644 (file)
@@ -86,9 +86,7 @@ debugger "gestures" f {
 
 : com-traceback ( debugger -- ) continuation>> traceback-window ;
 
-: com-help ( debugger -- ) error>> (:help) ;
-
-\ com-help H{ { +listener+ t } } define-command
+: com-help ( debugger -- ) error>> error-help-window ;
 
 : com-edit ( debugger -- ) error>> (:edit) ;
 
diff --git a/basis/ui/tools/error-list/icons/compiler-error.tiff b/basis/ui/tools/error-list/icons/compiler-error.tiff
new file mode 100644 (file)
index 0000000..1d6b157
Binary files /dev/null and b/basis/ui/tools/error-list/icons/compiler-error.tiff differ
diff --git a/basis/ui/tools/error-list/icons/compiler-warning.tiff b/basis/ui/tools/error-list/icons/compiler-warning.tiff
new file mode 100644 (file)
index 0000000..b50afa4
Binary files /dev/null and b/basis/ui/tools/error-list/icons/compiler-warning.tiff differ
diff --git a/basis/ui/tools/error-list/icons/help-lint-error.tiff b/basis/ui/tools/error-list/icons/help-lint-error.tiff
new file mode 100644 (file)
index 0000000..86dcc0a
Binary files /dev/null and b/basis/ui/tools/error-list/icons/help-lint-error.tiff differ
diff --git a/basis/ui/tools/error-list/icons/note.tiff b/basis/ui/tools/error-list/icons/note.tiff
new file mode 100644 (file)
index 0000000..01c328f
Binary files /dev/null and b/basis/ui/tools/error-list/icons/note.tiff differ
diff --git a/basis/ui/tools/error-list/icons/syntax-error.tiff b/basis/ui/tools/error-list/icons/syntax-error.tiff
new file mode 100644 (file)
index 0000000..869cfe7
Binary files /dev/null and b/basis/ui/tools/error-list/icons/syntax-error.tiff differ
diff --git a/basis/ui/tools/error-list/icons/unit-test-error.tiff b/basis/ui/tools/error-list/icons/unit-test-error.tiff
new file mode 100644 (file)
index 0000000..4f46ffa
Binary files /dev/null and b/basis/ui/tools/error-list/icons/unit-test-error.tiff differ
index 881808ea03f8760f23fdc01333b7b54585b4d3d2..5da6402c8e2256490d3648fff901e651c594648b 100644 (file)
@@ -87,9 +87,6 @@ IN: ui.tools.operations
 } define-operation
 
 ! Compiler errors
-: edit-error ( error -- )
-    [ file>> ] [ line#>> ] bi edit-location ;
-
 [ compiler-error? ] \ edit-error H{
     { +primary+ t }
     { +secondary+ t }
@@ -191,4 +188,4 @@ interactor
 "These commands operate on the entire contents of the input area."
 [ ]
 [ quot-action ]
-define-operation-map
+define-operation-map
\ No newline at end of file