Merge pull request #56 from robotpy/remove-pp-and-handle-continuations

Remove pp and handle continuations
This commit is contained in:
Dustin Spicuzza
2023-08-19 19:45:25 -04:00
committed by GitHub
6 changed files with 169 additions and 65 deletions

View File

@@ -116,17 +116,14 @@ def test_enum_w_multiline_expr() -> None:
Token(value="<<"),
Token(value="24"),
Token(value="|"),
Token(value="\\"),
Token(value="'A'"),
Token(value="<<"),
Token(value="16"),
Token(value="|"),
Token(value="\\"),
Token(value="'S'"),
Token(value="<<"),
Token(value="8"),
Token(value="|"),
Token(value="\\"),
Token(value="'H'"),
Token(value=")"),
]

View File

@@ -20,7 +20,6 @@ from cxxheaderparser.simple import (
Pragma,
parse_string,
ParsedData,
Define,
)
#
@@ -28,31 +27,17 @@ from cxxheaderparser.simple import (
#
def test_define() -> None:
content = """
#define simple
#define complex(thing) stuff(thing)
# define spaced
"""
data = parse_string(content, cleandoc=True)
assert data == ParsedData(
defines=[
Define(content="simple"),
Define(content="complex(thing) stuff(thing)"),
Define(content="spaced"),
],
)
def test_includes() -> None:
content = """
#include <global.h>
#include "local.h"
# include "space.h"
"""
data = parse_string(content, cleandoc=True)
assert data == ParsedData(includes=[Include("<global.h>"), Include('"local.h"')])
assert data == ParsedData(
includes=[Include("<global.h>"), Include('"local.h"'), Include('"space.h"')]
)
def test_pragma() -> None:
@@ -63,7 +48,49 @@ def test_pragma() -> None:
"""
data = parse_string(content, cleandoc=True)
assert data == ParsedData(pragmas=[Pragma(content="once")])
assert data == ParsedData(
pragmas=[Pragma(content=Value(tokens=[Token(value="once")]))]
)
def test_pragma_more() -> None:
content = """
#pragma (some content here)
#pragma (even \
more \
content here)
"""
data = parse_string(content, cleandoc=True)
assert data == ParsedData(
pragmas=[
Pragma(
content=Value(
tokens=[
Token(value="("),
Token(value="some"),
Token(value="content"),
Token(value="here"),
Token(value=")"),
]
)
),
Pragma(
content=Value(
tokens=[
Token(value="("),
Token(value="even"),
Token(value="more"),
Token(value="content"),
Token(value="here"),
Token(value=")"),
]
)
),
]
)
#
@@ -267,3 +294,44 @@ def test_user_defined_literal() -> None:
]
)
)
#
# Line continuation
#
def test_line_continuation() -> None:
content = """
static int \
variable;
"""
data = parse_string(content, cleandoc=True)
assert data == ParsedData(
namespace=NamespaceScope(
variables=[
Variable(
name=PQName(segments=[NameSpecifier(name="variable")]),
type=Type(
typename=PQName(segments=[FundamentalSpecifier(name="int")])
),
static=True,
)
]
)
)
#
# #warning (C++23)
#
def test_warning_directive() -> None:
content = """
#warning "this is a warning"
"""
data = parse_string(content, cleandoc=True)
assert data == ParsedData()