HaRe-0.6: refactorer/RefacIdentify.hs
module RefacIdentify where
import System.IO.Unsafe
import PosSyntax hiding (ModuleName, HsName, SN)
import SourceNames
import ScopeModule
import UniqueNames hiding (srcLoc)
import HsName
import HsLexerPass1
import PNT
import TiPNT
import SimpleGraphs(reverseGraph,reachable)
import HsTokens
import PrettyPrint
import RefacTypeSyn
import RefacLocUtils
import Data.Char
import GHC.Unicode
import AbstractIO
import Maybe
import List
import Data.Function
import RefacUtils
import LocalSettings
-- this module is used to identify the clone class we are interested in.
-- we use the highlighted expression passed in, and write the clone class
-- to a separate file for use with parseAnswers.
refacIdentify args
= do
AbstractIO.putStrLn "refacIdentify"
let fileName = ghead "fileName'" args
beginRow = read (args!!1)::Int
beginCol = read (args!!2)::Int
endRow = read (args!!3)::Int
endCol = read (args!!4)::Int
AbstractIO.writeFile answerFilePath ""
-- collect the answers...
(inscps, exps, mod, tokList)<-parseSourceFileOld fileName
let subExp = locToExp (beginRow, beginCol) (endRow, endCol) tokList mod
expression <- AbstractIO.readFile transFilePath
let expressions = (read expression)::([ [(HsExpP, String, String)] ])
clonedExps = concat (filter (subExp `myElem`) expressions)
-- write the clone class to two files for analysis.
AbstractIO.writeFile classAnswerPath $ show clonedExps
AbstractIO.writeFile classTransformPath $ show clonedExps
AbstractIO.putStrLn "Clone class identified."
myElem :: HsExpP -> [(HsExpP, String, String)] -> Bool
myElem _ [] = False
myElem e ((x,y,z):xs)
-- | toRelativeLocs e == toRelativeLocs x = True
| findEntityWithLocation e x = True
| otherwise = myElem e xs