 : trim-self ( seq -- newseq )
     [ [ (trim-self) ] subset ] assoc-map ;
 
+: filter-symbols ( alist -- alist )
+    [
+        nip first dup def-hash get at
+        [ first ] 2apply literalize = not
+    ] assoc-subset ;
+
 M: sequence run-lint ( seq -- seq )
     [
         global [ dup . flush ] bind
         dup lint
     ] { } map>assoc
     trim-self
-    [ second empty? not ] subset ;
+    [ second empty? not ] subset
+    filter-symbols ;
 
 M: word run-lint ( word -- seq )
     1array run-lint ;
 
 : lint-all ( -- seq )
-    all-words run-lint
-    [
-        nip first dup def-hash get at
-        [ first ] 2apply literalize = not
-    ] assoc-subset
-    dup [ lint. ] each ;
+    all-words run-lint dup lint. ;
+
+: lint-vocab ( vocab -- seq )
+    words run-lint dup lint. ;
+
+: lint-word ( word -- seq )
+    1array run-lint dup lint. ;

        def-hash get at [ bl bl bl bl word-path. ] each
        nl
    ] each nl nl ;
    

GENERIC: run-lint ( obj -- obj )

: word-path. ( word -- )
    [ word-vocabulary ":" ] keep unparse 3append write nl ;

: (lint.) ( pair -- )
    first2 >r word-path. r> [
        bl bl bl bl
        dup .
