def parse_source_group(ctx, tokens, breakstack): """ :: source_group(<name> [FILES <src>...] [REGULAR_EXPRESSION <regex>]) source_group(TREE <root> [PREFIX <prefix>] [FILES <src>...]) source_group(<name> <regex>) :see: https://cmake.org/cmake/help/latest/command/source_group.html """ descriminator = get_nth_semantic_token(tokens, 0) if descriminator is not None and descriminator.spelling.upper() == "TREE": kwargs = { "PREFIX": PositionalParser(1), "FILES": PositionalParser("+") } return StandardArgTree.parse(ctx, tokens, 2, kwargs, [], breakstack) kwargs = { "FILES": PositionalParser("+"), "REGULAR_EXPRESSION": PositionalParser(1) } descriminator = get_nth_semantic_token(tokens, 1) if descriminator is not None and descriminator.spelling.upper( ) not in kwargs: return StandardArgTree.parse(ctx, tokens, 2, {}, [], breakstack) return StandardArgTree.parse(ctx, tokens, 1, kwargs, [], breakstack)
def parse_build_command(ctx, tokens, breakstack): """ :: build_command(<variable> [CONFIGURATION <config>] [TARGET <target>] [PROJECT_NAME <projname>] # legacy, causes warning ) :see: https://cmake.org/cmake/help/latest/command/build_command.html """ kwargs = { "CONFIGURATION": PositionalParser(1), "TARGET": PositionalParser(1), "PROJECT_NAME": PositionalParser(1) } second_token = get_nth_semantic_token(tokens, 1) if second_token is not None and second_token.spelling.upper not in kwargs: ctx.lint_ctx.record_lint( "W0106", "build_command(<cachevariable> <makecommand>)", location=tokens[0].get_location()) return StandardArgTree.parse(ctx, tokens, "2", {}, [], breakstack) return StandardArgTree.parse(ctx, tokens, "1", kwargs, [], breakstack)
def parse_get_filename_component(ctx, tokens, breakstack): """ :: get_filename_component(<VAR> <FileName> <COMP> [CACHE]) get_filename_component(<VAR> FileName PROGRAM [PROGRAM_ARGS <ARG_VAR>] [CACHE]) :see: https://cmake.org/cmake/help/latest/command/get_filename_component.html """ descriminator = get_nth_semantic_token(tokens, 2) if descriminator is not None and descriminator.spelling.upper( ) == "PROGRAM": flags = ["PROGRAM", "PROGRAM_ARGS", "CACHE"] return StandardArgTree.parse(ctx, tokens, "3+", {}, flags, breakstack) flags = [ "DIRECTORY", "NAME", "EXT", "NAME_WE", "ABSOLUTE", "REALPATH", "PATH", ] return StandardArgTree.parse(ctx, tokens, "3+", {}, flags, breakstack)
def parse_install_programs(ctx, tokens, breakstack): """ :: install_programs(<dir> file1 file2 [file3 ...]) install_programs(<dir> FILES file1 [file2 ...]) install_programs(<dir> regexp) :see: https://cmake.org/cmake/help/latest/command/install_programs.html """ second_token = get_nth_semantic_token(tokens, 1) third_token = get_nth_semantic_token(tokens, 2) if second_token is not None and second_token.spelling.upper() == "FILES": return StandardArgTree.parse(ctx, tokens, "3+", {}, ["FILES"], breakstack) if third_token is None: return StandardArgTree.parse(ctx, tokens, 2, {}, [], breakstack) return StandardArgTree.parse(ctx, tokens, "3+", {}, [], breakstack)
def parse_cmake_parse_arguments(ctx, tokens, breakstack): """ :: cmake_parse_arguments(<prefix> <options> <one_value_keywords> <multi_value_keywords> <args>...) cmake_parse_arguments(PARSE_ARGV <N> <prefix> <options> <one_value_keywords> <multi_value_keywords>) :see: https://cmake.org/cmake/help/latest/command/cmake_parse_arguments.html """ first_token = get_nth_semantic_token(tokens, 0) if first_token is not None and first_token.spelling.upper == "PARSE_ARGV": return StandardArgTree.parse(ctx, tokens, "6", {}, ["PARSE_ARGV"], breakstack) return StandardArgTree.parse(ctx, tokens, "5+", {}, [], breakstack)
def parse_cmake_policy(ctx, tokens, breakstack): """ :: cmake_policy(VERSION <min>[...<max>]) cmake_policy(SET CMP<NNNN> NEW) cmake_policy(SET CMP<NNNN> OLD) cmake_policy(GET CMP<NNNN> <variable>) cmake_policy(PUSH) cmake_policy(POP) :see: https://cmake.org/cmake/help/latest/command/cmake_policy.html """ first_token = get_nth_semantic_token(tokens, 0) if first_token is None: return StandardArgTree.parse(ctx, tokens, "+", {}, [], breakstack) if first_token.type is lex.TokenType.DEREF: ctx.lint_ctx.record_lint("C0114", location=first_token.get_location()) return StandardArgTree.parse(ctx, tokens, "+", {}, [], breakstack) descriminator = first_token.spelling.upper() if descriminator == "VERSION": return StandardArgTree.parse(ctx, tokens, "2+", {}, ["VERSION"], breakstack) if descriminator == "SET": return StandardArgTree.parse(ctx, tokens, 3, {}, ["SET", "OLD", "NEW"], breakstack) if descriminator == "GET": return StandardArgTree.parse(ctx, tokens, 3, {}, ["GET"], breakstack) if descriminator in ("PUSH", "POP"): return StandardArgTree.parse(ctx, tokens, 1, {}, ["PUSH", "POP"], breakstack) ctx.lint_ctx.record_lint("E1126", location=first_token.get_location()) return StandardArgTree.parse(ctx, tokens, 1, {}, ["PUSH", "POP"], breakstack)