from ansible.parsing.yaml.objects import AnsibleMapping

from ansiblelater.standard import StandardBase


class CheckScmInSrc(StandardBase):

    sid = "ANSIBLE0005"
    description = "Use `scm:` key rather than `src: scm+url`"
    helptext = "usage of `src: scm+url` not recommended"
    version = "0.1"
    types = ["rolesfile"]

    def check(self, candidate, settings):
        roles, errors = self.get_tasks(candidate, settings)

        if not errors:
            for role in roles:
                if (
                    isinstance(role, AnsibleMapping) and bool(role.get("src"))
                    and "+" in role.get("src")
                ):
                    errors.append(self.Error(role["__line__"], self.helptext))

        return self.Result(candidate.path, errors)
