3.7 KiB
3.7 KiB
Repository Guidelines
Project Structure & Module Organization
src/holds the shell implementation, with submodules forbuiltins/,executor/,parser/, andvariables/.include/contains public headers used across modules.lib/is populated at build time with third-party 42 libraries (libft, get_next_line, ft_printf, ft_args).docs/stores project references and manual test notes (seedocs/tests.md).build/is the object output directory generated bymake.
Build, Test, and Development Commands
makeormake all: buildminishell(auto-clones required libs intolib/).make clean: remove objects inbuild/.make fclean: remove objects and theminishellbinary (also cleans libs).make re: full rebuild../minishell: run locally after a build.make DEBUG=lldbormake DEBUG=valgrindormake DEBUG=address: rebuild with debug/ASan-friendly flags.
Coding Style & Naming Conventions
- The codebase follows 42 Norminette v4 rules. Run
norminette *.c *.h(or on specific files) before submitting changes. - Keep file names lowercase with underscores (e.g.,
src/builtins/echo/echo.c). - Keep headers in
include/and expose only what modules need.
Parser & Lexer Functionality (Current src/parser)
- Runtime entrypoint is
parse(line, minishell)fromsrc/minishell.c(readline -> parse -> execute). parsesplits the input line by unquoted|usingextract_next_command+find_boundary.- Each non-empty segment is trimmed and converted into a
t_commandviacmdnew. set_argvsplits by unquoted spaces; quote characters are preserved in the resulting argument text.expand_envsis currently a TODO (no$VARexpansion is applied in parser stage).- Redirections/heredoc are not converted into
t_command.redirectionsyet insrc/parser/parser.c. set_pathresolves builtins and direct paths (/,./,../), otherwise searchesPATHwithaccess(..., F_OK).src/parser/lexer.cprovides a separate lexer (lex) that tokenizes intoTOKEN_WORD,TOKEN_PIPE,TOKEN_REDIRECT_IN,TOKEN_REDIRECT_OUT,TOKEN_APPEND, andTOKEN_HEREDOC.- The lexer tracks single/double quote context so metacharacters inside quotes remain part of words.
- Meta runs are read as contiguous chunks in
read_token(for example, repeated|/</>are captured as one token value). - Current parser flow does not consume the lexer output yet.
Parser & Lexer Known Gaps
src/parser/parser.ccurrently callstokenize()with no valid declaration/definition in that unit, causing a build error with-Werror.src/parser/parser.cwritescommand->infileandcommand->outfile, but those fields are not present int_command(include/core.h), causing build errors.src/parser/parser.ckeeps atokensvariable that is unused, also failing under-Werror.include/parser.hexportsparseonly;lexis not declared in public headers.- No explicit unmatched-quote syntax error handling is implemented in parser/lexer path.
Testing Guidelines
- There is no automated test runner. Use manual checks in
docs/tests.mdand basic shell behavior checks (pipes, redirects, builtins). - When debugging memory issues, run under valgrind and use the suppression file in
valgrind/readline.supp.
Commit & Pull Request Guidelines
- Commit messages in this repo use a simple
type: summaryformat (examples:update: ...,fix: ...). Keep summaries short and specific. - For PRs, include:
- What changed and why.
- How to test (commands or manual steps).
- Notes on any parser/executor/builtin behavior changes.
Configuration Tips
- The project depends on
readline; ensure your system haslibreadline-devor equivalent before building.