Coverage Report

Created: 2025-03-04 07:22

/src/serenity/Userland/Libraries/LibRegex/RegexError.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (c) 2020, Emanuel Sprung <emanuel.sprung@gmail.com>
3
 *
4
 * SPDX-License-Identifier: BSD-2-Clause
5
 */
6
7
#pragma once
8
9
#include "RegexDefs.h"
10
#include <AK/StringView.h>
11
#include <AK/Types.h>
12
13
namespace regex {
14
15
enum class Error : u8 {
16
    NoError = __Regex_NoError,
17
    InvalidPattern = __Regex_InvalidPattern,                           // Invalid regular expression.
18
    InvalidCollationElement = __Regex_InvalidCollationElement,         // Invalid collating element referenced.
19
    InvalidCharacterClass = __Regex_InvalidCharacterClass,             // Invalid character class type referenced.
20
    InvalidTrailingEscape = __Regex_InvalidTrailingEscape,             // Trailing \ in pattern.
21
    InvalidNumber = __Regex_InvalidNumber,                             // Number in \digit invalid or in error.
22
    MismatchingBracket = __Regex_MismatchingBracket,                   // [ ] imbalance.
23
    MismatchingParen = __Regex_MismatchingParen,                       // ( ) imbalance.
24
    MismatchingBrace = __Regex_MismatchingBrace,                       // { } imbalance.
25
    InvalidBraceContent = __Regex_InvalidBraceContent,                 // Content of {} invalid: not a number, number too large, more than two numbers, first larger than second.
26
    InvalidBracketContent = __Regex_InvalidBracketContent,             // Content of [] invalid.
27
    InvalidRange = __Regex_InvalidRange,                               // Invalid endpoint in range expression.
28
    InvalidRepetitionMarker = __Regex_InvalidRepetitionMarker,         // ?, * or + not preceded by valid regular expression.
29
    ReachedMaxRecursion = __Regex_ReachedMaxRecursion,                 // MaximumRecursion has been reached.
30
    EmptySubExpression = __Regex_EmptySubExpression,                   // Sub expression has empty content.
31
    InvalidCaptureGroup = __Regex_InvalidCaptureGroup,                 // Content of capture group is invalid.
32
    InvalidNameForCaptureGroup = __Regex_InvalidNameForCaptureGroup,   // Name of capture group is invalid.
33
    InvalidNameForProperty = __Regex_InvalidNameForProperty,           // Name of property is invalid.
34
    DuplicateNamedCapture = __Regex_DuplicateNamedCapture,             // Name of property is invalid.
35
    InvalidCharacterClassEscape = __Regex_InvalidCharacterClassEscape, // Invalid escaped entity in character class.
36
};
37
38
inline StringView get_error_string(Error error)
39
2.49k
{
40
2.49k
    switch (error) {
41
0
    case Error::NoError:
42
0
        return "No error"sv;
43
303
    case Error::InvalidPattern:
44
303
        return "Invalid regular expression."sv;
45
0
    case Error::InvalidCollationElement:
46
0
        return "Invalid collating element referenced."sv;
47
0
    case Error::InvalidCharacterClass:
48
0
        return "Invalid character class type referenced."sv;
49
0
    case Error::InvalidTrailingEscape:
50
0
        return "Trailing \\ in pattern."sv;
51
38
    case Error::InvalidNumber:
52
38
        return "Number in \\digit invalid or in error."sv;
53
15
    case Error::MismatchingBracket:
54
15
        return "[ ] imbalance."sv;
55
484
    case Error::MismatchingParen:
56
484
        return "( ) imbalance."sv;
57
0
    case Error::MismatchingBrace:
58
0
        return "{ } imbalance."sv;
59
0
    case Error::InvalidBraceContent:
60
0
        return "Content of {} invalid: not a number, number too large, more than two numbers, first larger than second."sv;
61
0
    case Error::InvalidBracketContent:
62
0
        return "Content of [] invalid."sv;
63
7
    case Error::InvalidRange:
64
7
        return "Invalid endpoint in range expression."sv;
65
0
    case Error::InvalidRepetitionMarker:
66
0
        return "?, * or + not preceded by valid regular expression."sv;
67
0
    case Error::ReachedMaxRecursion:
68
0
        return "Maximum recursion has been reached."sv;
69
0
    case Error::EmptySubExpression:
70
0
        return "Sub expression has empty content."sv;
71
27
    case Error::InvalidCaptureGroup:
72
27
        return "Content of capture group is invalid."sv;
73
1.62k
    case Error::InvalidNameForCaptureGroup:
74
1.62k
        return "Name of capture group is invalid."sv;
75
0
    case Error::InvalidNameForProperty:
76
0
        return "Name of property is invalid."sv;
77
0
    case Error::DuplicateNamedCapture:
78
0
        return "Duplicate capture group name"sv;
79
0
    case Error::InvalidCharacterClassEscape:
80
0
        return "Invalid escaped entity in character class."sv;
81
2.49k
    }
82
0
    return "Undefined error."sv;
83
2.49k
}
84
}
85
86
using regex::get_error_string;