# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""
A 2to3 fixer that converts all string literals to use double quotes.

Strings that contain double quotes will not be modified. Prefixed string
literals will also not be modified. This affects both single-quoted strings
and triple-single-quoted strings.

"""

from lib2to3.fixer_base import BaseFix
from lib2to3.pgen2 import token


class FixDoubleQuoteStrings(BaseFix):

    explicit = True
    _accept_type = token.STRING

    def match(self, node):
        res = node.value.startswith("'") and '"' not in node.value[1:-1]
        return res

    def transform(self, node, results):
        node.value = node.value.replace("'", '"')
        node.changed()
