Esempio n. 1
0
 def argument_usage_list(self) -> Sequence[a.ArgumentUsage]:
     return [
         a.Choice.of_single_argument_choices(
             a.Multiplicity.OPTIONAL,
             [
                 a.Option(names.STRIP_TRAILING_SPACE_OPTION_NAME),
                 a.Option(names.STRIP_TRAILING_NEW_LINES_OPTION_NAME),
             ],
         )
     ]
Esempio n. 2
0
class Description(grammar.PrimitiveDescriptionWithNameAsInitialSyntaxToken):
    ARGUMENT_USAGE_LIST = (
        a.Single(a.Multiplicity.OPTIONAL,
                 a.Option(matcher_options.FULL_MATCH_ARGUMENT_OPTION)),
        syntax_elements.REGEX_SYNTAX_ELEMENT.single_mandatory,
    )

    @property
    def argument_usage_list(self) -> Sequence[a.ArgumentUsage]:
        return self.ARGUMENT_USAGE_LIST

    @property
    def description_rest(self) -> Sequence[ParagraphItem]:
        tp = TextParser({
            'REGEX':
            syntax_elements.REGEX_SYNTAX_ELEMENT.singular_name,
            'full_regex_match':
            option_syntax.option_syntax(
                matcher_options.FULL_MATCH_ARGUMENT_OPTION),
            'model':
            matcher_model.TEXT_MODEL,
        })
        return tp.fnap(_DESCRIPTION)

    @property
    def see_also_targets(self) -> Sequence[SeeAlsoTarget]:
        return syntax_elements.REGEX_SYNTAX_ELEMENT.cross_reference_target,
Esempio n. 3
0
 def invokation_variants(self) -> List[InvokationVariant]:
     return [
         invokation_variant_from_args([
             a.Single(a.Multiplicity.OPTIONAL,
                      a.Option(IGNORE_EXIT_CODE_OPTION_NAME)),
             a.Single(a.Multiplicity.MANDATORY,
                      syntax_elements.PROGRAM_SYNTAX_ELEMENT.argument),
         ]),
     ]
Esempio n. 4
0
def python_interpreter(arguments: List[a.ArgumentUsage]) -> InvokationVariant:
    return invokation_variant_from_args(
        [
            a.Single(a.Multiplicity.MANDATORY,
                     a.Option(pgm_syntax_elements.PYTHON_EXECUTABLE_OPTION_NAME))
        ] +
        arguments,
        _TEXT_PARSER.fnap(_PYTHON_INTERPRETER_DESCRIPTION)
    )
Esempio n. 5
0
    def invokation_variants(self) -> List[InvokationVariant]:
        optional_transformation_option = a.Single(
            a.Multiplicity.OPTIONAL,
            string_transformer.STRING_TRANSFORMATION_ARGUMENT)

        program_token = syntax_elements.PROGRAM_SYNTAX_ELEMENT.single_mandatory
        output_channel_token = a.Choice.of_single_argument_choices(
            a.Multiplicity.MANDATORY, [
                a.Option(option_name)
                for option_name in defs.PROGRAM_OUTPUT_OPTIONS.values()
            ])

        ignore_exit_code_token = a.Single(a.Multiplicity.OPTIONAL,
                                          a.Option(defs.IGNORE_EXIT_CODE))

        file_option = a.Single(a.Multiplicity.MANDATORY,
                               a.Option(defs.FILE_OPTION))

        src_file_arg = a.Single(a.Multiplicity.MANDATORY,
                                defs.SOURCE_FILE_ARGUMENT_NAME)

        return [
            invokation_variant_from_args(
                [
                    syntax_elements.SYMBOL_REFERENCE_SYNTAX_ELEMENT.
                    single_mandatory, optional_transformation_option
                ],
                self._tp.fnap(_REFERENCE_DESCRIPTION),
            ),
            invokation_variant_from_args([
                syntax_elements.RICH_STRING_SYNTAX_ELEMENT.single_mandatory,
                optional_transformation_option
            ]),
            invokation_variant_from_args([
                file_option,
                src_file_arg,
                optional_transformation_option,
            ], self._tp.fnap(_FILE_DESCRIPTION)),
            invokation_variant_from_args(
                [output_channel_token, ignore_exit_code_token, program_token],
                self._tp.fnap(_PROGRAM_DESCRIPTION) + texts.
                run_description__with_ignored_exit_code_option__w_str_trans()),
        ]
Esempio n. 6
0
 def _phase_spec_sed(self) -> SyntaxElementDescription:
     phase_spec__act = a.Option(defs.PHASE_SPEC__OPTION_NAME,
                                defs.PHASE_SPEC__ACT)
     phase_spec__non_act = a.Option(defs.PHASE_SPEC__OPTION_NAME,
                                    defs.PHASE_SPEC__NON_ACT)
     return SyntaxElementDescription(
         defs.PHASE_SPEC_ELEMENT,
         invokation_variants=[
             invokation_variant_from_args(
                 [a.Single(a.Multiplicity.MANDATORY, phase_spec__act)],
                 self._tp.fnap(_DESCRIPTION__PHASE_SPEC__ACT),
             ),
             invokation_variant_from_args(
                 [a.Single(a.Multiplicity.MANDATORY, phase_spec__non_act)],
                 self._tp.fnap(_DESCRIPTION__PHASE_SPEC__NON_ACT),
             ),
         ],
         before_invokation_variants=(),
     )
Esempio n. 7
0
def _existing_path(option: a.OptionName,
                   description_rest: str) -> InvokationVariant:
    return invokation_variant_from_args([
        a.Single(a.Multiplicity.MANDATORY,
                 a.Option(option)),
        a.Single(a.Multiplicity.MANDATORY,
                 PATH_OF_EXISTING_FILE_OPT_CONFIG.argument)
    ],
        _TEXT_PARSER.fnap(description_rest)
    )
Esempio n. 8
0
class SyntaxDescription(
        grammar.PrimitiveDescriptionWithNameAsInitialSyntaxToken):
    OPTION_SYNTAX_ELEMENT = a.Choice.of_single_argument_choices(
        a.Multiplicity.MANDATORY, [
            a.Option(names.CHARACTER_CASE_TO_LOWER_OPTION_NAME),
            a.Option(names.CHARACTER_CASE_TO_UPPER_OPTION_NAME),
        ])

    @property
    def argument_usage_list(self) -> Sequence[a.ArgumentUsage]:
        return (self.OPTION_SYNTAX_ELEMENT, )

    @property
    def description_rest(self) -> Sequence[ParagraphItem]:
        return [self._options_table()]

    @staticmethod
    def _options_table() -> ParagraphItem:
        return docs.simple_list_with_space_between_elements_and_content(
            [
                SyntaxDescription._item(
                    names.CHARACTER_CASE_TO_LOWER_OPTION_NAME,
                    TextParser({'case': _CASE__LOWER})),
                SyntaxDescription._item(
                    names.CHARACTER_CASE_TO_UPPER_OPTION_NAME,
                    TextParser({'case': _CASE__UPPER})),
            ],
            lists.ListType.VARIABLE_LIST,
        )

    @staticmethod
    def _item(
        option: a.OptionName,
        tp: TextParser,
    ) -> lists.HeaderContentListItem:
        return docs.list_item(
            doc_format.syntax_text(option_syntax.option_syntax(option)),
            tp.fnap(_DESCRIPTION))
Esempio n. 9
0
def _stdin_sed() -> SyntaxElementDescription:
    return cli_argument_syntax_element_description(
        _STDIN_ARGUMENT,
        (),
        [
            invokation_variant_from_args([
                a.Single(
                    a.Multiplicity.MANDATORY,
                    a.Option(program.STDIN_OPTION_NAME,
                             argument=syntax_elements.
                             STRING_SOURCE_SYNTAX_ELEMENT.singular_name))
            ]),
        ],
        _stdin_description_rest(),
    )
Esempio n. 10
0
 def test_option(self):
     self._check(sut.Option(sut.OptionName('n')), sut.Option)
Esempio n. 11
0
 def test_option(self):
     value = sut.Option(sut.OptionName('s'), 'argument')
     str(value)
Esempio n. 12
0
from exactly_lib.util.cli_syntax.elements import argument as a
from . import matcher

WHOLE_PATH_MATCHER_NAME = 'path'
NAME_MATCHER_NAME = 'name'
STEM_MATCHER_NAME = 'stem'
SUFFIXES_MATCHER_NAME = 'suffixes'
SUFFIX_MATCHER_NAME = 'suffix'
TYPE_MATCHER_NAME = 'type'
PROGRAM_MATCHER_NAME = matcher.RUN_PROGRAM

PROGRAM_ARG_OPTION__LAST = a.Option(a.OptionName('path-arg-last'))
PROGRAM_ARG_OPTION__MARKER = a.Option(a.OptionName('path-arg-marker'),
                                      'MARKER')
Esempio n. 13
0
from exactly_lib.definitions.entity import types
from exactly_lib.util.cli_syntax import option_syntax
from exactly_lib.util.cli_syntax.elements import argument as a
from . import program
from ..test_case import reserved_words

IDENTITY_TRANSFORMER_NAME = 'identity'
SEQUENCE_OPERATOR_NAME = reserved_words.PIPE
RUN_PROGRAM = program.RUN_PROGRAM_PRIMITIVE

STRING_TRANSFORMER_ARGUMENT = a.Named(types.STRING_TRANSFORMER_TYPE_INFO.syntax_element_name)

STRING_TRANSFORMATION_ARGUMENT = a.Named('TRANSFORMATION')

WITH_TRANSFORMED_CONTENTS_OPTION_NAME = a.OptionName(long_name='transformed-by')

WITH_TRANSFORMED_CONTENTS_OPTION = option_syntax.option_syntax(WITH_TRANSFORMED_CONTENTS_OPTION_NAME)

TRANSFORMATION_OPTION = a.Option(WITH_TRANSFORMED_CONTENTS_OPTION_NAME,
                                 argument=types.STRING_TRANSFORMER_TYPE_INFO.syntax_element_name)

WITH_IGNORED_EXIT_CODE_OPTION_NAME = program.WITH_IGNORED_EXIT_CODE_OPTION_NAME
Esempio n. 14
0
 def argument_usage_list(self) -> Sequence[a.ArgumentUsage]:
     return [
         a.Single(a.Multiplicity.OPTIONAL,
                  a.Option(names.RUN_WITH_IGNORED_EXIT_CODE_OPTION_NAME)),
         syntax_elements.PROGRAM_SYNTAX_ELEMENT.single_mandatory,
     ]
Esempio n. 15
0
from exactly_lib.common.help.see_also import SeeAlsoUrlInfo
from exactly_lib.common.help.syntax_contents_structure import cli_argument_syntax_element_description, \
    invokation_variant_from_args
from exactly_lib.definitions.entity import syntax_elements
from exactly_lib.help.entities.syntax_elements.contents_structure import syntax_element_documentation
from exactly_lib.impls.types.regex import parse_regex
from exactly_lib.util.cli_syntax.elements import argument as a
from exactly_lib.util.textformat.textformat_parser import TextParser

_IGNORE_CASE_ARGUMENT = a.Option(parse_regex.IGNORE_CASE_OPTION_NAME)

_CL_ARGUMENTS = [
    a.Single(a.Multiplicity.OPTIONAL, _IGNORE_CASE_ARGUMENT),
    syntax_elements.RICH_STRING_SYNTAX_ELEMENT.single_mandatory,
]

SEE_ALSO_URL_INFO = SeeAlsoUrlInfo(
    'Python regular expressions',
    'https://docs.python.org/3/library/re.html#regular-expression-syntax')

_DESCRIPTION_OF_IGNORE_CASE_OPTION = """\
Makes the matching ignore case.
"""

DOCUMENTATION = syntax_element_documentation(
    None, syntax_elements.REGEX_SYNTAX_ELEMENT, [], (), [
        invokation_variant_from_args(_CL_ARGUMENTS),
    ], [
        cli_argument_syntax_element_description(
            _IGNORE_CASE_ARGUMENT,
            TextParser().fnap(_DESCRIPTION_OF_IGNORE_CASE_OPTION))
Esempio n. 16
0
def option_for(option_name: argument.OptionName,
               argument_name: str = None) -> argument.Option:
    return argument.Option(option_name, argument_name)
Esempio n. 17
0
from exactly_lib.util.cli_syntax.elements import argument as a
from .entity import syntax_elements
from .path import REL_SYMBOL_OPTION_NAME
from .test_case import reserved_words

ASSIGNMENT_OPERATOR = reserved_words.ASSIGN
APPEND_OPERATOR = '+='

SYMBOL_SYNTAX_ELEMENT_NAME = 'SYMBOL'

REL_SYMBOL_OPTION = a.Option(REL_SYMBOL_OPTION_NAME,
                             syntax_elements.SYMBOL_NAME_SYNTAX_ELEMENT.singular_name)

RELATIVITY_ARGUMENT = a.Named('RELATIVITY')

OPTIONAL_RELATIVITY_ARGUMENT_USAGE = a.Single(a.Multiplicity.OPTIONAL,
                                              RELATIVITY_ARGUMENT)

FILE_ARGUMENT = a.Named('FILE')

DIR_WITHOUT_RELATIVITY_OPTIONS_ARGUMENT = a.Named('DIRECTORY')

DESTINATION_PATH_ARGUMENT = a.Named('DESTINATION')
SOURCE_PATH_ARGUMENT = a.Named('SOURCE')

FILE_NAME_STRING = a.Named('FILE-NAME')

FILE_NAME_STRING__SINGLE_MANDATORY = a.Single(a.Multiplicity.MANDATORY,
                                              FILE_NAME_STRING)
Esempio n. 18
0
from exactly_lib.definitions.entity import syntax_elements
from exactly_lib.definitions.primitives import program, string_transformer
from exactly_lib.util.cli_syntax.elements import argument as a

IDENTITY_TRANSFORMER_NAME = string_transformer.IDENTITY_TRANSFORMER_NAME
SEQUENCE_OPERATOR_NAME = string_transformer.SEQUENCE_OPERATOR_NAME
RUN_PROGRAM_TRANSFORMER_NAME = string_transformer.RUN_PROGRAM

RUN_WITH_IGNORED_EXIT_CODE_OPTION_NAME = program.WITH_IGNORED_EXIT_CODE_OPTION_NAME

REPLACE_TRANSFORMER_NAME = 'replace'
FILTER_TRANSFORMER_NAME = 'filter'
GREP_TRANSFORMER_NAME = 'grep'

RANGE_EXPR_SED_NAME = 'LINE-NUMBER-RANGE'
LINE_NUMBERS_FILTER_OPTION = a.Option(a.OptionName('line-nums'))

LINE_NUMBERS_FILTER__LIMIT_SEPARATOR = ':'

CHARACTER_CASE = 'char-case'
CHARACTER_CASE_TO_LOWER_OPTION_NAME = a.OptionName(long_name='to-lower')
CHARACTER_CASE_TO_UPPER_OPTION_NAME = a.OptionName(long_name='to-upper')

STRIP_SPACE = 'strip'
STRIP_TRAILING_SPACE_OPTION_NAME = a.OptionName(long_name='trailing-space')
STRIP_TRAILING_NEW_LINES_OPTION_NAME = a.OptionName(
    long_name='trailing-new-lines')

TCDS_PATH_REPLACEMENT = 'replace-test-case-dirs'

LINES_SELECTION_OPTION_NAME = a.OptionName(long_name='at')