17db96d56Sopenharmony_ci"""Fixer that turns 1L into 1, 0755 into 0o755.
27db96d56Sopenharmony_ci"""
37db96d56Sopenharmony_ci# Copyright 2007 Georg Brandl.
47db96d56Sopenharmony_ci# Licensed to PSF under a Contributor Agreement.
57db96d56Sopenharmony_ci
67db96d56Sopenharmony_ci# Local imports
77db96d56Sopenharmony_cifrom ..pgen2 import token
87db96d56Sopenharmony_cifrom .. import fixer_base
97db96d56Sopenharmony_cifrom ..fixer_util import Number
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ciclass FixNumliterals(fixer_base.BaseFix):
137db96d56Sopenharmony_ci    # This is so simple that we don't need the pattern compiler.
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ci    _accept_type = token.NUMBER
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ci    def match(self, node):
187db96d56Sopenharmony_ci        # Override
197db96d56Sopenharmony_ci        return (node.value.startswith("0") or node.value[-1] in "Ll")
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci    def transform(self, node, results):
227db96d56Sopenharmony_ci        val = node.value
237db96d56Sopenharmony_ci        if val[-1] in 'Ll':
247db96d56Sopenharmony_ci            val = val[:-1]
257db96d56Sopenharmony_ci        elif val.startswith('0') and val.isdigit() and len(set(val)) > 1:
267db96d56Sopenharmony_ci            val = "0o" + val[1:]
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ci        return Number(val, prefix=node.prefix)
29