Esempio n. 1
0
    def rename(self, r_strategy, iBuilder, scopeAnalyst, debug=False):

        if r_strategy == self.RS.NONE:
            return iBuilder.get_text()
#             return iBuilder.get_text_wo_literals()

        elif r_strategy == self.RS.NORMALIZED:
            text = iBuilder.get_text()
            #             text = iBuilder.get_text_wo_literals()

            norm = Normalizer()
            (ok, out, _err) = norm.web_run(text, rename=True)
            if not ok:
                return text

            # The normalization affects global variables too
            # Fall back on input in those cases
            clear = Beautifier()
            (ok, b_out, _err) = clear.web_run(out)
            #             print b_out, _err
            if not ok:
                return text

            iB = IndexBuilder(WebLexer(b_out).tokenList)
            iB_copy = deepcopy(iB)

            sA = WebScopeAnalyst(b_out)
            isGlobal = sA.isGlobal
            #             print 'isGlobal------'
            #             for key,val in isGlobal.iteritems():
            #                 print key,val

            for line_num, line in enumerate(iB.tokens):
                for line_idx, (token_type, token) in enumerate(line):
                    if is_token_subtype(token_type, Token.Name):
                        (l, c) = iB.tokMap[(line_num, line_idx)]
                        p = iB.flatMap[(l, c)]
                        #                         print token, isGlobal.get((token, p), True)

                        if isGlobal.get((token, p), True):
                            iB_copy.tokens[line_num][line_idx] = \
                                iBuilder.tokens[line_num][line_idx]

            return iB_copy.get_text()

        elif r_strategy == self.RS.SCOPE_ID:
            return ''.join(self.renameUsingScopeId(scopeAnalyst, iBuilder))

        elif r_strategy == self.RS.HASH_ONE:
            return self.collapse(
                self.renameUsingHashDefLine(scopeAnalyst,
                                            iBuilder,
                                            twoLines=False,
                                            debug=debug))

        elif r_strategy == self.RS.HASH_TWO:
            return self.collapse(
                self.renameUsingHashDefLine(scopeAnalyst,
                                            iBuilder,
                                            twoLines=True,
                                            debug=debug))

        else:
            return iBuilder.get_text()