All notable changes to this project will be documented in this file.
- (pc) Added
peek_char - (pc) Added
one_charandonetext parsers - (pc) Added
many_str - (pc) Added
specific_str,specific_str_ignoring - (pc) Added FnCtxParser
- (pc) Introducing ManyCtxParser
- (pc) Replaced FnCtxParser with IifParser
- (pc) Introducing MapToUnitParser
- (pc) Introducing err_supplier
- (pc) Support different context type for the inner parser of
flatten - (Makefile) Repair executable permission issues on Samba
- (pc) Implement SetContext for ThenWith
- (ci) Fix build workflow for PRs (#119)
- (ci) Fix pipeline
- (ci) Revert Clippy from Windows pipeline for now
- (pc) Ensure IifCtxParser context is initialized
- (basic) Improve performance of IndexedMap
- (pc) Rename FlatMap to AndThen
- (pc) Removed FlatMapOkNone in favor of AndThenErr
- (parser) Dropped SpecificStr for simplicity
- (pc) Replaced
any_charandpeek_charwithread_pandpeek_p - (pc) Replaced
one_charand withone_p - (pc) Removed
FilterPredicate - (parser) Parse cr and crlf with the same parser
- (parser) Re-introducing comparison operator token types
- (pc) Remove specific_str and specific_str_ignoring
- (parser) Move
keyword_ignoringtokeywordmodule - (parser) Keyword parser should not handle EOF
- (parser) Remove explicit parsers outside pc package (#117)
- (pc) Merge
SetContexttrait intoParser - Add dedicated whitespace module (#120)
- (parser) Improve expression parsers regarding whitespace (#121)
- (pc) Pass context by reference
- (pc) Removed ThenWithLeft parser
- (pc) Removed init_context parser
- (parser) Use IifCtxParser in ParamName
- (pc) Introducing MapDecorator (#122)
- Hide Variant type from rusty_parser
- (linter) Refactor types module into smaller modules
- (linter) Moved variable_info to linter (#123)
- Align module versions
- (linter) Fix some clippy warnings
- (basic) Fixing some clippy warnings
- Update gitignore
- (basic) Fixed a few clippy issues
- (pc) Correct generic parameter name for MapErrParser
- (pc) Removed unused inc_position methods of InputTrait
- Updated gitignore
- (ci) Fixing clippy warnings and add clippy to CI
- (pc) Removed
and_optparser, addingone_of_p - Use clippy in Makefile
- (parser) Break apart
expressionmodule to smaller files - (pc) Move no_context to its own module
- (pc) Moved IifParser to its own module and renamed to IifCtxParser
- (pc) Implement
no_incompletedirectly intoandparser - (Makefile) Print the size of the types
- (parser) Implement
no_incompletedirectly intoWithExpectedMessageparser - (Makefile) Print longest type length
- (pc) Introducing context for parsers
- (pc) Add flatten parser
- (pc) Support contextual parsers
- (pc) Added
PeekParser - (pc) Support custom error in FilterParser
- (parser) Implement specific string parser
- (parser) Moved the dollar sign check for keywords into the
any_tokenparser - (pc) Combine
charwithVec<char>into aString - (pc) Added
Token.text()method to return the ownership of the String - (parser) Make identifier token include dots
- (pc) Added
map_fatal_err,map_non_fatal_errandflat_map_none - (parser) Support treating EOF as fatal in keyword parser
- (pc) Introducing
init_contextparser - (pc) Introducing
then_with_leftparser - (pc) Support
manywithout closures - (pc) Added
surroundparser - (parser) Introducing
whitespace_ignoring, parse whitespace but ignore the result - (parser) Support parsing specific string and ignoring the output
- (parser) Support parsing a specific keyword and ignoring the output
- (pc) Start support for text (char and string) parsing
- (pc) Support error messages in
filter_or_err - (pc) Changed the filter predicate into its own trait, embedding error management in it
- (pc) Add
is_softmethod to error trait
- (parser) Comment separator must start with EOL
- (parser) QBasic names cannot contain underscores
- (parser)
comment_separatorshould read any number of extra EOL or whitespace tokens - (pc) Fix broken build for release mode
- (pc) Implement
or_defaultdirectly onmanyparser - (pc) Merge the types
NoIncompleteandOrFailinto one parser,MapErr - (parser) Remove
specificmodule - (pc) Re-introduce the
OrDefaulttrait - (pc) Remove all extra methods from
Parsertrait - (pc) Improve macros for parsers
- (pc) Support more complex parsers in macros
- (pc) Merge
parser1_declandparser1_implinto one macroparser - (pc) Re-working macro support
- Remove the
lazy_parsermacro and add alazyfunction - (parser) Add dedicated
structforany_token_ofparser - (parser) Support padded whitespace in
any_token_of - (parser) Support negative maches in
any_token_of - (pc) Split
set_contextinto a separate trait - (pc) Make
Seq2,Seq3, etc structs private - (parser) Move token-level logic to a new
tokensmodule - (parser) Move
detect_eoftoglobal_statement - (parser) Implement the Parser trait directly on the char type
- (parser) Add
or_expectedas a shortcut foror_syntax_error("Expected: ") - (parser) Remove single-char token types
- (pc) Improve code readability for single char Token
- (parser) Add
AnySymbolParser - (parser) Strengthen module visibility and rename modules
- (parser) Create dedicated struct parser for keyword
- (parser) Removed
keyword_choiceand improvedkeyword_map - (parser) Improvements to
statementsparser - (pc) Align
then_withto use RefCell just likethen_with_right - (pc) Implement
delimited_byanddelimited_by_allow_missing - (pc) Remove OptZip parser
- (pc) Introduce
ParserErrorTraittrait - (parser) Remove the explicit fatal designation on ParserError
- (pc) Switch to a mutable input
- (common) Deleted
CaseInsensitiveStrfor simplicity
- (pc) Improve
Tokendocumentation
- (parser) Improve
TokenTypelookup performance
- (Makefile) Show only parser types in
print-type-size - (parser) Add
_wssuffix totoken_kind_parserfunctions that are surrounded by optional whitespace - (parser) Move
char_parsersto top-level module - (parser) Move
string_parsersto top-level module - (parser) Use
AnyCharstruct directly - (parser) Use
filter_or_err - (pc) Do not use macro in
many - (pc) Removed
TokenListandtoken_list_to_string - (pc) Removed unused Clone trait from Token
- (pc) Removed macros
- (parser) Reuse
eol_ws_zero_or_morefunction - (parser) Simplify implementation of any_token_ws in favor of padded_by_ws
- (pc) Change
parseto mut - (pc) Fix various clippy warnings
- (pc) Strengthen Token invariants
- (parser) Fix some clippy issues
- (pc) Move helper methods into the main Parser trait
- (pc) Make private modules public for better visibility in the docs
- Revert the specialized
no_incompleteandor_defaultimplementations due to code duplication
- (ci) Do not run the build workflow for tags
- (ci) Correct artifact paths for release workflow
- Add RowColView to map a string to row/col taking newlines into account
- Added RcStringView as the basic input unit that is lightweight and clone-able, and suppors row-col information
- Added Opt parser
- Added surround parser
- Added
flat_map_negate_none - Decouple
ParserfromParseError - Move
no_incompleteto theParserlevel
- Linter was reporting a valid variable as illegal
- Incorrect usage of features
- Move some code to test cfg
- Fixed build in release mode
- Incorrect upper bound for max length of string
- AndThenOkErr should never re-map errors, only okay and incomplete results
- Use syntax error when entire program can't be parsed
- Use Box dyn for to_option and or_default to fix the build on Mac
- Auto-fixed some issues with clippy
seqparsers should convert errors to fatal- Removed macro_export from visitor macros
- Remove the build warning about the
resolver
- Split and_pc.rs into smaller files
- Removed _pc suffix from modules
- Reworked csv implementation, added loop_while and opt_zip traits
- Removed unused traits
- Various refactorings (#113)
- Do not use expression to parse param_name.rs
- Unify parsing of dim_name and param_name
- Linter improvements
- Replaced methods of TypeQualifier with new traits IntoTypeQualifier and IntoQualified
- Dropped usage of QualifiedName in Name
- Promoted pre_linter.rs to directory
- Using inner mutability in pre_linter
- Adding convertible.rs for converting function/sub parameters in pre-linter
- Removed lifeline from converter.rs objects for simplicity
- Simplified implicits in linter
- Introducing Stateful trait
- Removed SameTypeConverter trait
- Removed SameTypeConverterInContext trait and ConverterImpl
- Reverted Stateful implementation
- Implemented child state for expression conversion
- Using a different child state for ExpressionNode and Expression
- Promoted files to directory modules
- Reworked dim_rules, removed conversion dance from param_type to dim_type
- Removed custom PartialEq implementation of ParamType
- Trying a structure where small types and traits live in modules named types and traits respectively
- Implemented Convertible for ProgramNode and TopLevelToken
- Remove Rc from Context
- Introducing ResolvedParamType
- Dropped position from the name of UserDefinedType
- Simplify pre-linter
- Drop inner mutability for interpreter Input trait
- Removed all usages of Rc and RefCell
- Split collecting phase of LabelLinter into a LabelCollector
- Dropped top level built_ins module
- Using Cargo workspaces
- Decided on public fields for Locatable and VarName, dropped AsRef implementation and accessor methods
- Removed CaseInsensitiveString's Add operations and StringUtils pad_left
- Added rusty_variant crate
- Moved file_constants.rs to rusty_parser
- Introducing CaseInsensitiveStr
- Moved string_utils.rs to interpreter
- Moved to_str_unchecked to interpreter
- Rename Location and Node
- Separate error type per crate
- Moved error_envelope to interpreter
- Moved indexed_map to interpreter
- Refactor Parser trait to generic, so that it can support
dyn - Use
dynforOrParser - Use new parsers to build Tokenizer
- Use parser combinator in
comment.rs - Use parser combinator for parsing FileHandle
- Use parser combinator for parsing the main program
- Use parser combinator in statement_separator
- Use parser combinator in keyword_choice and keyword_map
- Use parser combinator in select_case
- Remove negate parser
- Remove peek parser
- Remove token from unread method as it is no longer used
- Removed ParserOnce trait
- Removed NonOptParser marker trait
- Introduce ParseResult for old parsers instead of standard Result
- Introducing ParseResult::None enum member
- Use ParseResult in AndThen mapping functions
- Use ParseResult in AndThenOkErr mapping functions
- Reduce usages of ParseResult::Incomplete
- Replaced MapIncompleteError with WithExpectedMessage parser
- Removed ParseError::Incomplete
- Removed incomplete errors
- Port enum member to new
- Removed method
- Added combiner function to AddWithoutUndo
- Remove GuardPC
- Remove concrete KeepLeft and KeepRight structs
- Renamed AndThen to FlatMap
- Deleted AllowDefault and AllowNone
- Expose the combiner function in allow_opt
- Expose the combiner function in and
- Remove the PC suffix from parsers
- Divide Parser into smaller traits
- Redesigned pc_ng to use the standard Result type and not return the parsed input in the Err
- Use the new ParseResult everywhere
- Use Box dyn for or and seq
- Moved surround method to And trait
- Moved loop_while to its own trait LoopWhile
- Moved error related parsers to
- Move logging method to its own trait
- Move allow_none_if method to its own trait
- Moved one_or_more and zero_or_more to Many trait
- Moved method to its own trait
- Removed deprecated parser in favor of
- Removed deprecated in favor of
- Renamed
rusty_parser/typestorusty_parser/specific - Move
ImplicitsandNamesunder a new module - Added new type
CompactsInfo - Added wrapper struct
NamesInner - Delegating implementation to new structs in
namesmodule - Expose traits of
namesoutside module - Store names of all scopes in
Nameswithout dropping them - Expose linter context to interpreter
- Restructure
rusty_lintermodules - Restructure
rusty_parsermodules - Flatten public api of
rusty_parsercrate - Remove complex nested context objects in linter converter
- Simplify converter for statements
- Not allowing 'zero'
Position - Use
VariableInfofrom linterContextin generator - Use a struct for FunctionDeclaration and SubDeclaration
- Introducing new
Visitorpattern in linter - Simplify
pre_lintertypes - Implement visitor pattern for
constant_map - Converted function
validate_string_lengthinto a trait - Converted
user_defined_type_rulesto the visitor pattern - Use new
Assignmentstruct inStatement - Adapt
for_next_counter_match_linterandprint_linterto the Visitor pattern - Add a
bi_tuplemacro to reduce some boilerplate code - Changed
Statement::SubCallto use a struct instead of two fields - Changed
Statement::BuiltInSubCallto use a struct instead of two fields - Improve encapsulation of
CaseBlockstruct - Make
bi_tuplemacro more expressive - Migrated
UserDefinedNamesCollectorto the new Visitor pattern - Combined all
VarType*traits into oneVarTypetrait - Made fields of
TypedNameprivate - Introducing
ref_to_value_visitor - Converted
Nameinto a struct with private fields - Add
AsBareNameandToBareNametraits - Remove
QualifiedNametype - Renamed
chaintothen_with - Removed
and_without_undo - Moved specific types away from
pcmodule - Use small functions to improve
constant_mapreadability - Implement
ConstLookuptrait fornames_inner - Removed
PositionfromToken, made fields private - Moved the
pcframework to therusty_pcpackage
- Styling changelog according to default options
- Ensure no code lives in
mod.rsfiles - Applied auto-fixes from cargo clippy
- Implementing cargo clippy suggestions
- Removed unnecessary boxing of
&dyn Printer - Implementing cargo clippy suggestions
- Implementing cargo clippy suggestions
- Reduced module visibility
- Extracted rusty_parser crate
- Extracted rusty_linter crate
- Removed funding file
- Update dependencies
- Extract test function in name parser's unit test
- Deprecated some error related methods
- Fix warning about lifeline
- Uniform coding style of parser implementation
- Reverted deprecation of
or_failandno_incomplete - Removed method
Variant::is_array - Renamed idx variable to index for more clarity
- Removed deprecated method in
MockInterpreterTrait - Applied a few clippy suggestions
- Fixed
use_selfclippy rule - Fixed clippy finding
branches_sharing_code - Derive default with annotation in linter converter types
- MainContext of PreLinter does not need to be public
- Marked function as test only
- Renamed
implicitstoimplicit_vars - Moved
NameInfoto its own module - Improved docs
- Use single field in
Namesfor all one-level data - Removed mut methods of
Position - Add comments
- Instantiate
pre_lintercontext withDefault - Removed
unwrapcustom functions in favor ofFromtrait - Change
ConstantMaptypeinto astructfor encapsulation - Move
bi_tuplemacro to a new module - Implement
AsRefforTypedName<T> - Removed
From<Token>implementation ofBareName - Removed unused code in
type_qualifier - Improve
keyword_enummacro - Removed
AccumulateParser - Removed
AllowNoneIfparser - Removed obscure
ExtractExpressiontrait - Code readability improvements to
opt_second_expression - Improve naming of
ConstValueResolverfor clarity - Reformat code with nightly rustfmt
- Upgrade packages edition to 2024
- Upgraded
rusty_parserto 2024 edition - Re-arrange packages in
rusty_parser - Update
README - Split Windows build on a separate GitHub workflow
- Migrating GitHub workflows to
dtolnay/rust-toolchain - Unifiy build and build-windows GitHub actions
- Trying a
windows-latestGitHub runner instead of cross compilation - Experimenting with sharing artifacts between jobs
- Align build and release GitHub workflows
- Using tokenizers (#110)
- Updated copyright year in LICENSE
- Use cliff.toml from instarepo
- (changelog) Updated changelog
- (changelog) Updated changelog
- [breaking] Use standard PATH_TRANSLATED variable for Apache cgi-script instead of BLR_PROGRAM
- Introducing git-cliff and changelog
- Arguments appearing out of order due to enumerating over HashMap
- Changed Name::Qualified to use QualifiedName as it used to in the past
- Removed HasQualifier trait
- Renamed TypeDefinition to ExpressionType
- Moved numeric casts to separate module
- Strings cannot be used as an if condition