Skip to content

Commit

Permalink
Fix Regex types (#250)
Browse files Browse the repository at this point in the history
  • Loading branch information
howmanysmall authored Oct 16, 2024
1 parent 010cd36 commit 0f4cac2
Showing 1 changed file with 57 additions and 42 deletions.
99 changes: 57 additions & 42 deletions types/regex.luau
Original file line number Diff line number Diff line change
Expand Up @@ -19,67 +19,82 @@ local RegexMatch = {

type RegexMatch = typeof(RegexMatch)

--[=[
@class RegexCaptures
Captures from a regular expression.
]=]
local RegexCaptures = {}

--[=[
@within RegexCaptures
@tag Method
Returns the match at the given index, if one exists.
@param index -- The index of the match to get
@return RegexMatch -- The match, if one exists
]=]
function RegexCaptures.get(self: RegexCaptures, index: number): RegexMatch?
return nil :: any
end

--[=[
@within RegexCaptures
@tag Method
Returns the match for the given named match group, if one exists.
@param group -- The name of the group to get
@return RegexMatch -- The match, if one exists
]=]
function RegexCaptures.group(self: RegexCaptures, group: string): RegexMatch?
return nil :: any
end

function RegexCaptures.format(self: RegexCaptures, format: string): string
return nil :: any
end

--[=[
@within RegexCaptures
@tag Method
@class RegexCaptures
Formats the captures using the given format string.
Captures from a regular expression.
]=]
export type RegexCaptures = typeof(setmetatable(
{} :: {
--[=[
@within RegexCaptures
@tag Method
@method get
### Example usage
Returns the match at the given index, if one exists.
```lua
local regex = require("@lune/regex")
@param index -- The index of the match to get
@return RegexMatch -- The match, if one exists
]=]

local re = regex.new("(?<day>[0-9]{2})-(?<month>[0-9]{2})-(?<year>[0-9]{4})")
get: (self: RegexCaptures, index: number) -> RegexMatch?,

local caps = re:captures("On 14-03-2010, I became a Tenneessee lamb.");
assert(caps ~= nil, "Example pattern should match example text")
--[=[
@within RegexCaptures
@tag Method
@method group
local formatted = caps:format("year=$year, month=$month, day=$day")
print(formatted) -- "year=2010, month=03, day=14"
```
Returns the match for the given named match group, if one exists.
@param format -- The format string to use
@return string -- The formatted string
]=]
function RegexCaptures.format(self: RegexCaptures, format: string): string
return nil :: any
end
@param group -- The name of the group to get
@return RegexMatch -- The match, if one exists
]=]
group: (self: RegexCaptures, group: string) -> RegexMatch?,

--[=[
@within RegexCaptures
@tag Method
@method format
Formats the captures using the given format string.
### Example usage
```lua
local regex = require("@lune/regex")
local re = regex.new("(?<day>[0-9]{2})-(?<month>[0-9]{2})-(?<year>[0-9]{4})")
local caps = re:captures("On 14-03-2010, I became a Tenneessee lamb.");
assert(caps ~= nil, "Example pattern should match example text")
local formatted = caps:format("year=$year, month=$month, day=$day")
print(formatted) -- "year=2010, month=03, day=14"
```
export type RegexCaptures = typeof(RegexCaptures)
@param format -- The format string to use
@return string -- The formatted string
]=]
format: (self: RegexCaptures, format: string) -> string,
},
{} :: {
__len: (self: RegexCaptures) -> number,
}
))

local Regex = {}

Expand Down

0 comments on commit 0f4cac2

Please sign in to comment.