packages feed

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