+7
-7
@@ -49,17 +49,17 @@ CheckOptions:
|
|||||||
|
|
||||||
# Types
|
# Types
|
||||||
- key: readability-identifier-naming.StructCase
|
- key: readability-identifier-naming.StructCase
|
||||||
value: snake_case
|
value: lower_case
|
||||||
- key: readability-identifier-naming.ClassCase
|
- key: readability-identifier-naming.ClassCase
|
||||||
value: snake_case
|
value: lower_case
|
||||||
- key: readability-identifier-naming.EnumCase
|
- key: readability-identifier-naming.EnumCase
|
||||||
value: snake_case
|
value: lower_case
|
||||||
# - key: readability-identifier-naming.AbstractClassPrefix
|
# - key: readability-identifier-naming.AbstractClassPrefix
|
||||||
# value: I
|
# value: I
|
||||||
|
|
||||||
# Functions
|
# Functions
|
||||||
- key: readability-identifier-naming.FunctionCase
|
- key: readability-identifier-naming.FunctionCase
|
||||||
value: snake_case
|
value: lower_case
|
||||||
|
|
||||||
# Variables
|
# Variables
|
||||||
- key: readability-identifier-naming.VariableCase
|
- key: readability-identifier-naming.VariableCase
|
||||||
@@ -81,13 +81,13 @@ CheckOptions:
|
|||||||
|
|
||||||
# Static constexpr
|
# Static constexpr
|
||||||
- key: readability-identifier-naming.StaticConstexprVariableCase
|
- key: readability-identifier-naming.StaticConstexprVariableCase
|
||||||
value: aNy_CaSe
|
value: aNy_CasE
|
||||||
|
|
||||||
# Constants
|
# Constants
|
||||||
- key: readability-identifier-naming.ConstantCase
|
- key: readability-identifier-naming.ConstantCase
|
||||||
value: aNy_CaSe
|
value: aNy_CasE
|
||||||
- key: readability-identifier-naming.StaticConstantCase
|
- key: readability-identifier-naming.StaticConstantCase
|
||||||
value: aNy_CaSe
|
value: aNy_CasE
|
||||||
- key: readability-identifier-naming.EnumConstantCase
|
- key: readability-identifier-naming.EnumConstantCase
|
||||||
value: CamelCase
|
value: CamelCase
|
||||||
- key: readability-identifier-naming.ScopedEnumConstantCase
|
- key: readability-identifier-naming.ScopedEnumConstantCase
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
CompileFlags:
|
CompileFlags:
|
||||||
Add: [-std=c11, -Wall, -Werror, -Wpedantic]
|
Add: [-std=c++17, -Wall, -Werror, -Wpedantic]
|
||||||
|
|
||||||
InlayHints:
|
InlayHints:
|
||||||
BlockEnd: true
|
BlockEnd: true
|
||||||
@@ -16,7 +16,7 @@ Hover:
|
|||||||
ShowAKA: true
|
ShowAKA: true
|
||||||
|
|
||||||
If:
|
If:
|
||||||
PathMatch: (./.*\.c|./.*\.h)
|
PathMatch: (./.*\.cpp|./.*\.hpp)
|
||||||
Diagnostics:
|
Diagnostics:
|
||||||
UnusedIncludes: Strict
|
UnusedIncludes: Strict
|
||||||
MissingIncludes: Strict
|
MissingIncludes: Strict
|
||||||
|
|||||||
Executable
+29
@@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
BUILD_DIR="build"
|
||||||
|
|
||||||
|
echo "Running clang-format..."
|
||||||
|
|
||||||
|
FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(cpp|hpp)$' || true)
|
||||||
|
|
||||||
|
if [ -z "$FILES" ]; then
|
||||||
|
echo "No C/C++ files to check"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
for file in $FILES; do
|
||||||
|
clang-format -i "$file"
|
||||||
|
git add "$file"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Running clang-tidy..."
|
||||||
|
|
||||||
|
for file in $FILES; do
|
||||||
|
clang-tidy \
|
||||||
|
"$file" \
|
||||||
|
-p "$BUILD_DIR"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "pre-commit checks passed"
|
||||||
Executable
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
BUILD_DIR="build"
|
||||||
|
|
||||||
|
echo "Building..."
|
||||||
|
|
||||||
|
cmake --build "$BUILD_DIR"
|
||||||
|
|
||||||
|
echo "Running tests..."
|
||||||
|
|
||||||
|
ctest --test-dir "$BUILD_DIR" --output-on-failure
|
||||||
|
|
||||||
|
echo "pre-push checks passed"
|
||||||
@@ -50,22 +50,6 @@ class function_definition_node : public function_declarartion_node {
|
|||||||
public:
|
public:
|
||||||
function_definition_node(front::token name, function_body_handle&& body)
|
function_definition_node(front::token name, function_body_handle&& body)
|
||||||
: function_declarartion_node(name), m_body(std::move(body)) {}
|
: function_declarartion_node(name), m_body(std::move(body)) {}
|
||||||
|
|
||||||
~function_definition_node() override = default;
|
|
||||||
|
|
||||||
function_definition_node(function_definition_node&& other) noexcept
|
|
||||||
: function_declarartion_node(std::move(other)), m_body(std::move(other.m_body)) {}
|
|
||||||
|
|
||||||
function_definition_node(const function_definition_node&) = delete;
|
|
||||||
|
|
||||||
function_definition_node& operator=(function_definition_node&& other) noexcept {
|
|
||||||
if (this == &other) return *this;
|
|
||||||
function_declarartion_node::operator=(std::move(other));
|
|
||||||
m_body = std::move(other.m_body);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
function_definition_node& operator=(const function_definition_node&) = delete;
|
|
||||||
public:
|
public:
|
||||||
declaration_node_t declaration_type() const override { return declaration_node_t::FunctionDefinition; }
|
declaration_node_t declaration_type() const override { return declaration_node_t::FunctionDefinition; }
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ public:
|
|||||||
const handle<std::string_view>& value() const { return m_value; }
|
const handle<std::string_view>& value() const { return m_value; }
|
||||||
public:
|
public:
|
||||||
std::ostream& print(std::ostream& os) const override {
|
std::ostream& print(std::ostream& os) const override {
|
||||||
if (m_value.has_error()) return os << (std::string)m_value;
|
if (m_value.has_error()) return os << m_value.error();
|
||||||
return os << "string literal (" << *m_value << ")";
|
return os << "string literal (" << *m_value << ")";
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ namespace furc {
|
|||||||
|
|
||||||
struct location {
|
struct location {
|
||||||
std::string_view filename;
|
std::string_view filename;
|
||||||
std::size_t line;
|
std::size_t line = 0;
|
||||||
std::size_t column;
|
std::size_t column = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline std::ostream& operator<<(std::ostream& os, const location& location) {
|
static inline std::ostream& operator<<(std::ostream& os, const location& location) {
|
||||||
|
|||||||
@@ -75,13 +75,10 @@ public:
|
|||||||
|
|
||||||
Error error() const { return m_error; }
|
Error error() const { return m_error; }
|
||||||
|
|
||||||
operator reference() { return *m_value; }
|
reference operator*() { return m_value.value(); } // NOLINT(bugprone-unchecked-optional-access)
|
||||||
operator const_reference() const { return *m_value; }
|
const_reference operator*() const { return m_value.value(); } // NOLINT(bugprone-unchecked-optional-access)
|
||||||
|
pointer operator->() { return &m_value.value(); } // NOLINT(bugprone-unchecked-optional-access)
|
||||||
reference operator*() { return *m_value; }
|
const_pointer operator->() const { return &m_value.value(); } // NOLINT(bugprone-unchecked-optional-access)
|
||||||
const_reference operator*() const { return *m_value; }
|
|
||||||
pointer operator->() { return &*m_value; }
|
|
||||||
const_pointer operator->() const { return &*m_value; }
|
|
||||||
public:
|
public:
|
||||||
bool operator==(const T& rhs) const { return m_value.has_value() && *m_value == rhs; }
|
bool operator==(const T& rhs) const { return m_value.has_value() && *m_value == rhs; }
|
||||||
public:
|
public:
|
||||||
@@ -119,7 +116,7 @@ public:
|
|||||||
|
|
||||||
template <typename U, typename = std::enable_if_t<std::is_base_of_v<value_type, U>>>
|
template <typename U, typename = std::enable_if_t<std::is_base_of_v<value_type, U>>>
|
||||||
handle(location location, std::shared_ptr<U> value)
|
handle(location location, std::shared_ptr<U> value)
|
||||||
: m_data(data(location, value)) {}
|
: m_data(data(location, std::move(value))) {}
|
||||||
|
|
||||||
template <typename U,
|
template <typename U,
|
||||||
typename = std::enable_if_t<std::is_base_of_v<value_type, U> || std::is_base_of_v<U, value_type>>>
|
typename = std::enable_if_t<std::is_base_of_v<value_type, U> || std::is_base_of_v<U, value_type>>>
|
||||||
@@ -196,16 +193,18 @@ private:
|
|||||||
|
|
||||||
template <typename U, typename = std::enable_if_t<std::is_base_of_v<value_type, U>>>
|
template <typename U, typename = std::enable_if_t<std::is_base_of_v<value_type, U>>>
|
||||||
data(struct location location, std::shared_ptr<U> value)
|
data(struct location location, std::shared_ptr<U> value)
|
||||||
: location(location), value(value) {}
|
: location(location), value(std::move(value)) {}
|
||||||
|
|
||||||
template <typename U,
|
template <typename U,
|
||||||
typename = std::enable_if_t<std::is_base_of_v<value_type, U> || std::is_base_of_v<U, value_type>>>
|
typename = std::enable_if_t<std::is_base_of_v<value_type, U> || std::is_base_of_v<U, value_type>>>
|
||||||
data(handle<U*, Error>&& other) // NOLINT
|
data(handle<U*, Error>&& other) // NOLINT
|
||||||
: location(other.m_data->location) {
|
: location(other.m_data->location) { // NOLINT(bugprone-unchecked-optional-access)
|
||||||
if constexpr (std::is_base_of_v<value_type, U>) {
|
if constexpr (std::is_base_of_v<value_type, U>) {
|
||||||
value = std::static_pointer_cast<value_type>(std::move(other.m_data->value));
|
value = std::static_pointer_cast<value_type>(
|
||||||
|
std::move(other.m_data->value)); // NOLINT(bugprone-unchecked-optional-access)
|
||||||
} else {
|
} else {
|
||||||
value = std::dynamic_pointer_cast<value_type>(std::move(other.m_data->value));
|
value = std::dynamic_pointer_cast<value_type>(
|
||||||
|
std::move(other.m_data->value)); // NOLINT(bugprone-unchecked-optional-access)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -58,12 +58,12 @@ ast::node_handle<ast::declaration_node> parser::parse_declaration() {
|
|||||||
if (body.has_error()) return body;
|
if (body.has_error()) return body;
|
||||||
return ast::node_handle<ast::function_definition_node>{ first.location(),
|
return ast::node_handle<ast::function_definition_node>{ first.location(),
|
||||||
m_arena,
|
m_arena,
|
||||||
name,
|
*name,
|
||||||
std::move(body) };
|
std::move(body) };
|
||||||
}
|
}
|
||||||
case token_t::Semicolon: {
|
case token_t::Semicolon: {
|
||||||
m_peekBuffer.clear();
|
m_peekBuffer.clear();
|
||||||
return ast::node_handle<ast::function_declarartion_node>{ first.location(), m_arena, name };
|
return ast::node_handle<ast::function_declarartion_node>{ first.location(), m_arena, *name };
|
||||||
}
|
}
|
||||||
default: return { tok.location(), "unexpected token "s + tok->type };
|
default: return { tok.location(), "unexpected token "s + tok->type };
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user