From c32b99e6c7869404b3c41af0911dcb14a16f4480 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Mon, 27 Jun 2016 22:25:29 -0700 Subject: [PATCH] modern.refactor: working on some refactoring words. --- core/modern/refactor/authors.txt | 1 + core/modern/refactor/refactor.factor | 38 ++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 core/modern/refactor/authors.txt create mode 100644 core/modern/refactor/refactor.factor diff --git a/core/modern/refactor/authors.txt b/core/modern/refactor/authors.txt new file mode 100644 index 0000000000..7c1b2f2279 --- /dev/null +++ b/core/modern/refactor/authors.txt @@ -0,0 +1 @@ +Doug Coleman diff --git a/core/modern/refactor/refactor.factor b/core/modern/refactor/refactor.factor new file mode 100644 index 0000000000..698e6db05a --- /dev/null +++ b/core/modern/refactor/refactor.factor @@ -0,0 +1,38 @@ +! Copyright (C) 2016 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: accessors arrays assocs combinators.short-circuit kernel +modern modern.paths sequences sequences.extras ; +IN: modern.refactor + +: parse-all-paths ( -- seq ) + all-paths [ path>literals ] map-zip ; + +: USING:? ( obj -- ? ) + { [ uppercase-colon-literal? ] [ tag>> "USING" sequence= ] } 1&& ; + +: USE:? ( obj -- ? ) + { [ uppercase-colon-literal? ] [ tag>> "USE" sequence= ] } 1&& ; + +: any-use-form? ( obj -- ? ) + { [ USE:? ] [ USING:? ] } 1|| ; + + +: multiline-comment? ( obj -- ? ) + { [ double-matched-literal? ] [ tag>> "!" sequence= ] } 1&& ; + +: any-comment? ( obj -- ? ) + { [ line-comment-literal? ] [ multiline-comment? ] } 1|| ; + +: find-using ( name -- paths ) + parse-all-paths $[ + nip + dup { [ USING:? ] [ USE:? ] } 1|| [ + payload>> [ _ sequence= ] any? + ] [ drop f ] if + ] assoc-filter ; + +: find-using-lists ( -- paths ) + parse-all-paths $[ + [ { [ USING:? ] [ USE:? ] } 1|| ] filter + [ payload>> [ tag>> ] map ] map concat + ] assoc-map ;