Skip to content

Add Saint Vincent and the Grenadines holidays #2608

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 121 commits into from
Jul 8, 2025
Merged

Conversation

waqar2403
Copy link
Contributor

@waqar2403 waqar2403 commented Jun 6, 2025

Proposed change

Added Holidays for Saint Vincent and The Grenadines
Closes: #1263

Type of change

  • New country/market holidays support (thank you!)
  • Supported country/market holidays update (calendar discrepancy fix, localization)
  • Existing code/documentation/test/process quality improvement (best practice, cleanup, refactoring, optimization)
  • Dependency update (version deprecation/pin/upgrade)
  • Bugfix (non-breaking change which fixes an issue)
  • Breaking change (a code change causing existing functionality to break)
  • New feature (new holidays functionality in general)

Checklist

Copy link
Contributor

coderabbitai bot commented Jun 6, 2025

Summary by CodeRabbit

  • New Features

    • Added support for public holidays in Saint Vincent and the Grenadines, including official and special holidays from 1979 to 2050.
    • Introduced localization for holiday names in both en_US and en_VC English variants.
  • Documentation

    • Updated documentation to reflect support for Saint Vincent and the Grenadines and increased the total supported country count.
  • Tests

    • Added comprehensive tests to verify holiday calculations, observed rules, and localization for Saint Vincent and the Grenadines.

Summary by CodeRabbit

  • New Features

    • Added support for public holidays in Saint Vincent and the Grenadines, including all major national and Christian holidays, with accurate observance rules.
    • Introduced English (en_US, en_VC) translations for these holidays.
  • Documentation

    • Updated documentation to reflect the addition of Saint Vincent and the Grenadines as a supported country.
  • Tests

    • Added comprehensive tests to ensure correct holiday dates and observance for Saint Vincent and the Grenadines.

Walkthrough

Support for Saint Vincent and the Grenadines holidays has been added. This includes a new holiday provider class, registry updates, country imports, localization files for English, documentation updates, and a dedicated test suite to verify holiday calculations and aliases.

Changes

Files/Paths Change Summary
README.md Updated supported country count and added Saint Vincent and the Grenadines entry.
holidays/countries/init.py Added relative imports for Saint Vincent and the Grenadines country module and aliases.
holidays/countries/saint_vincent_and_the_grenadines.py Added new holiday provider class for Saint Vincent and the Grenadines and its aliases (VC, VCT).
holidays/locale/en_US/LC_MESSAGES/VC.po
holidays/locale/en_VC/LC_MESSAGES/VC.po
Added English localization files for Saint Vincent and the Grenadines holidays.
holidays/registry.py Registered Saint Vincent and the Grenadines in the COUNTRIES dictionary.
tests/countries/test_saint_vincent_and_the_grenadines.py Added test suite for Saint Vincent and the Grenadines holidays and aliases.
snapshots/countries/VC_COMMON.json Added holiday data snapshot for Saint Vincent and the Grenadines from 1979 to 2050.

Assessment against linked issues

Objective (Issue #) Addressed Explanation
Add Saint Vincent and the Grenadines holidays (#1263)
Provide localization for holiday names (#1263)
Add country to registry and documentation (#1263)
Provide tests for new country holidays (#1263)

Assessment against linked issues: Out-of-scope changes

No out-of-scope changes found.

Suggested reviewers

  • KJhellico
  • PPsyrius
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai auto-generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@waqar2403 waqar2403 changed the base branch from main to dev June 6, 2025 21:33
@KJhellico
Copy link
Collaborator

@coderabbitai review

Copy link
Contributor

coderabbitai bot commented Jun 6, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link

codecov bot commented Jun 6, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 100.00%. Comparing base (b4403d8) to head (97216e6).
Report is 1 commits behind head on dev.

Additional details and impacted files
@@            Coverage Diff            @@
##               dev     #2608   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files          256       257    +1     
  Lines        15358     15399   +41     
  Branches      2104      2105    +1     
=========================================
+ Hits         15358     15399   +41     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2421357 and 6c62227.

📒 Files selected for processing (7)
  • README.md (2 hunks)
  • holidays/countries/__init__.py (1 hunks)
  • holidays/countries/saint_vincent_and_the_grenadines.py (1 hunks)
  • holidays/locale/en_US/LC_MESSAGES/VC.po (1 hunks)
  • holidays/locale/en_VC/LC_MESSAGES/VC.po (1 hunks)
  • holidays/registry.py (1 hunks)
  • tests/countries/test_saint_vincent_and_the_grenadines.py (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (2)
holidays/countries/__init__.py (1)
holidays/countries/saint_vincent_and_the_grenadines.py (3)
  • SaintVincentAndTheGrenadines (22-91)
  • VC (94-95)
  • VCT (98-99)
tests/countries/test_saint_vincent_and_the_grenadines.py (2)
tests/common.py (6)
  • CommonCountryTests (356-374)
  • assertAliases (121-130)
  • assertNoHolidays (292-294)
  • assertHolidayName (195-199)
  • assertNoNonObservedHoliday (248-250)
  • assertHolidays (228-230)
holidays/countries/saint_vincent_and_the_grenadines.py (3)
  • SaintVincentAndTheGrenadines (22-91)
  • VC (94-95)
  • VCT (98-99)
🪛 Pylint (3.3.7)
tests/countries/test_saint_vincent_and_the_grenadines.py

[convention] 1-1: Missing module docstring

(C0114)


[convention] 23-23: Missing class docstring

(C0115)


[warning] 25-25: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestSaintVincentAndTheGrenadines.setUpClass' method

(W0221)


[convention] 29-29: Missing function or method docstring

(C0116)


[convention] 32-32: Missing function or method docstring

(C0116)


[convention] 35-35: Missing function or method docstring

(C0116)


[convention] 47-47: Missing function or method docstring

(C0116)


[convention] 59-59: Missing function or method docstring

(C0116)


[convention] 69-69: Missing function or method docstring

(C0116)

holidays/countries/saint_vincent_and_the_grenadines.py

[convention] 30-30: Line too long (112/100)

(C0301)


[convention] 1-1: Missing module docstring

(C0114)


[convention] 94-94: Missing class docstring

(C0115)


[convention] 98-98: Missing class docstring

(C0115)

🔇 Additional comments (16)
README.md (1)

108-108: Update supported country count
The count has been updated to 184, matching the new addition. Ensure this manual update stays in sync when adding/removing countries.

holidays/countries/__init__.py (1)

156-156: Import the new country provider
The import for SaintVincentAndTheGrenadines looks correct and is placed in alphabetical order.

holidays/locale/en_VC/LC_MESSAGES/VC.po (1)

1-81: Template for en_VC locale added
The new .po file correctly defines all message IDs for the en_VC variant. Ensure a final newline is present at end of file.

holidays/locale/en_US/LC_MESSAGES/VC.po (1)

46-48: Verify translation for National Workers Day
Using "Labor Day" may conflict with the US holiday on the first Monday of September. Confirm that this translation reflects the May 1 observance rather than the US Labor Day.

holidays/countries/saint_vincent_and_the_grenadines.py (5)

22-37: Well-structured holiday provider class with solid foundation.

The class definition follows the established patterns with appropriate inheritance and configuration. The start year of 1979 aligns with Saint Vincent and The Grenadines' independence.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 30-30: Line too long (112/100)

(C0301)


39-43: Constructor properly initializes parent classes.

The initialization sequence and default observed rule setup look good.


62-63: Good conditional logic for future holiday.

The year check for National Spiritual Baptist Day starting in 2025 is well-implemented.


68-79: Excellent handling of COVID-19 adjustments for 2020.

The special case for Carnival Monday/Tuesday in 2020 with proper documentation link shows good attention to real-world changes.


94-99: Standard alias implementation.

The VC and VCT alias classes follow the established pattern for country code aliases.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 94-94: Missing class docstring

(C0115)


[convention] 98-98: Missing class docstring

(C0115)

tests/countries/test_saint_vincent_and_the_grenadines.py (7)

23-27: Proper test setup with comprehensive year range.

The test class setup correctly inherits from CommonCountryTests and covers the full supported year range from 1979 to 2049.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 23-23: Missing class docstring

(C0115)


[warning] 25-25: Number of parameters was 4 in 'TestCase.setUpClass' and is now 1 in overriding 'TestSaintVincentAndTheGrenadines.setUpClass' method

(W0221)


29-30: Alias testing looks solid.

The country alias test properly verifies both VC and VCT aliases.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 29-29: Missing function or method docstring

(C0116)


32-33: Good boundary testing for start year.

Testing that no holidays exist before 1979 ensures the start_year logic works correctly.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 32-32: Missing function or method docstring

(C0116)


35-45: Thorough observed holiday testing for New Year's Day.

The observed date calculations are accurate - all test dates correctly represent years where January 1st fell on Sunday, requiring Monday observation.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 35-35: Missing function or method docstring

(C0116)


47-57: Comprehensive Labor Day testing.

The observed date logic for National Workers Day is correct - all dates represent May 1st falling on Sunday with proper Monday observation.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 47-47: Missing function or method docstring

(C0116)


59-67: Accurate Emancipation Day testing.

The observed dates for August 1st falling on Sunday are correctly calculated.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 59-59: Missing function or method docstring

(C0116)


69-84: Excellent comprehensive test for 2024.

This test covers all holidays defined in the provider and serves as a good regression test. The dates and holiday names match the expected implementation.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 69-69: Missing function or method docstring

(C0116)

waqar2403 and others added 5 commits June 7, 2025 11:19
Fixed Typo Issues

Signed-off-by: Muhammad Waqar <[email protected]>
Fixed Typo

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Muhammad Waqar <[email protected]>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Muhammad Waqar <[email protected]>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Muhammad Waqar <[email protected]>
Signed-off-by: Muhammad Waqar <[email protected]>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6c62227 and 9f8c021.

📒 Files selected for processing (4)
  • README.md (2 hunks)
  • holidays/countries/saint_vincent_and_the_grenadines.py (1 hunks)
  • holidays/locale/en_US/LC_MESSAGES/VC.po (1 hunks)
  • holidays/registry.py (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
holidays/registry.py (1)
Learnt from: KJhellico
PR: vacanza/holidays#2483
File: holidays/registry.py:177-177
Timestamp: 2025-04-18T21:13:55.589Z
Learning: In the holidays/registry.py file, COUNTRIES dictionary entries should use the class name (without spaces) as the first element of the tuple (e.g., "TurksAndCaicosIslands"), not the human-readable country name with spaces.
🪛 Pylint (3.3.7)
holidays/countries/saint_vincent_and_the_grenadines.py

[convention] 30-30: Line too long (112/100)

(C0301)


[convention] 1-1: Missing module docstring

(C0114)


[convention] 94-94: Missing class docstring

(C0115)


[convention] 98-98: Missing class docstring

(C0115)

🔇 Additional comments (4)
README.md (1)

108-108: LGTM! Documentation properly updated for new country support.

The country count increment and table entry are accurate and well-formatted.

Also applies to: 1137-1142

holidays/registry.py (1)

164-164: Registry entry looks good.

The entry follows the established pattern and the class name capitalization issue from previous reviews has been properly resolved.

holidays/locale/en_US/LC_MESSAGES/VC.po (1)

47-48: Good localization choice.

Translating "National Workers Day" to "Labor Day" for the en_US locale is culturally appropriate and follows American English conventions.

holidays/countries/saint_vincent_and_the_grenadines.py (1)

22-92: Solid holiday provider implementation.

The holiday definitions are comprehensive and well-structured. Good handling of special cases like the 2020 Carnival dates and the phased introduction of National Spiritual Baptist Day from 2025.

🧰 Tools
🪛 Pylint (3.3.7)

[convention] 30-30: Line too long (112/100)

(C0301)

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9f8c021 and ab3edea.

📒 Files selected for processing (3)
  • README.md (1 hunks)
  • holidays/countries/__init__.py (1 hunks)
  • holidays/registry.py (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
holidays/registry.py (1)
Learnt from: KJhellico
PR: vacanza/holidays#2483
File: holidays/registry.py:177-177
Timestamp: 2025-04-18T21:13:55.589Z
Learning: In the holidays/registry.py file, COUNTRIES dictionary entries should use the class name (without spaces) as the first element of the tuple (e.g., "TurksAndCaicosIslands"), not the human-readable country name with spaces.
🧬 Code Graph Analysis (1)
holidays/countries/__init__.py (1)
holidays/countries/zimbabwe.py (3)
  • Zimbabwe (17-79)
  • ZW (82-83)
  • ZWE (86-87)
🪛 Ruff (0.11.9)
holidays/countries/__init__.py

213-213: No newline at end of file

Add trailing newline

(W292)

🪛 Pylint (3.3.7)
holidays/countries/__init__.py

[convention] 213-213: Final newline missing

(C0304)

🔇 Additional comments (2)
holidays/registry.py (1)

165-165: Registry entry looks solid

The new entry follows the established pattern perfectly - proper alphabetical placement, correct class name capitalization, and appropriate country codes.

README.md (1)

1144-1149: Documentation entry is well-formatted

The new table row maintains proper alphabetical ordering and follows the established format. Good to see the supported languages are properly spaced.

waqar2403 added 2 commits June 7, 2025 11:35
Signed-off-by: Muhammad Waqar <[email protected]>
Signed-off-by: Muhammad Waqar <[email protected]>
waqar2403 and others added 3 commits June 7, 2025 12:43
Co-authored-by: Panpakorn Siripanich <[email protected]>
Signed-off-by: Muhammad Waqar <[email protected]>
Co-authored-by: Panpakorn Siripanich <[email protected]>
Signed-off-by: Muhammad Waqar <[email protected]>
Co-authored-by: Panpakorn Siripanich <[email protected]>
Signed-off-by: Muhammad Waqar <[email protected]>
waqar2403 and others added 2 commits July 7, 2025 17:58
Signed-off-by: Muhammad Waqar <[email protected]>
@waqar2403
Copy link
Contributor Author

Hopefully the last changes before this PR is merged in 👍 (please run make snapshot after this as well to update the snapshots)

🤞

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 662a41f and 6104cda.

📒 Files selected for processing (6)
  • README.md (2 hunks)
  • holidays/countries/saint_vincent_and_the_grenadines.py (1 hunks)
  • holidays/locale/en_US/LC_MESSAGES/VC.po (1 hunks)
  • holidays/locale/en_VC/LC_MESSAGES/VC.po (1 hunks)
  • snapshots/countries/VC_COMMON.json (1 hunks)
  • tests/countries/test_saint_vincent_and_the_grenadines.py (1 hunks)
🧰 Additional context used
🧠 Learnings (7)
📓 Common learnings
Learnt from: KJhellico
PR: vacanza/holidays#2608
File: tests/countries/test_saint_vincent_and_the_grenadines.py:162-178
Timestamp: 2025-07-02T18:17:53.342Z
Learning: In the Saint Vincent and the Grenadines holidays implementation, New Year's Day is added without observed rules using `_add_new_years_day()` and should not include observed rule testing in its test method. Only holidays explicitly wrapped with `_add_observed()` have observed behavior.
Learnt from: KJhellico
PR: vacanza/holidays#2608
File: tests/countries/test_saint_vincent_and_the_grenadines.py:162-178
Timestamp: 2025-07-02T18:21:59.302Z
Learning: In the Saint Vincent and the Grenadines holiday tests, for holidays without observed rules that only require a single assertHolidayName call, pass the holiday name directly as a string literal rather than storing it in a variable first for cleaner, more concise code.
Learnt from: KJhellico
PR: vacanza/holidays#2631
File: tests/countries/test_sint_maarten.py:62-0
Timestamp: 2025-06-14T21:12:07.224Z
Learning: KJhellico prefers to focus on completing and reviewing the main holiday implementation code before doing detailed reviews of the corresponding test files.
Learnt from: KJhellico
PR: vacanza/holidays#2354
File: holidays/countries/fiji.py:171-183
Timestamp: 2025-03-29T15:15:05.919Z
Learning: In the Fiji holidays implementation, the maintainers are aware of the need to extend the MAWLID_DATES dictionary beyond 2025 when future official references become available, and will do so when appropriate. No suggestions about extending this dictionary should be made in future reviews.
Learnt from: PPsyrius
PR: vacanza/holidays#2537
File: holidays/countries/finland.py:0-0
Timestamp: 2025-05-10T04:32:15.760Z
Learning: In the holidays package, detailed historical context and additional information should be added as comments at the method level or above conditional blocks, while comments directly above tr() function calls should only contain the holiday name itself (e.g., "# Independence Day.").
Learnt from: KJhellico
PR: vacanza/holidays#2614
File: README.md:108-108
Timestamp: 2025-06-14T20:13:29.536Z
Learning: In the vacanza/holidays repository, the team prefers to manually update the country count in README.md when adding new countries, with tests in place to verify the count stays accurate. They are satisfied with this approach and do not want it automated.
Learnt from: PPsyrius
PR: vacanza/holidays#2537
File: tests/countries/test_finland.py:23-26
Timestamp: 2025-05-09T18:36:09.607Z
Learning: The holidays project prioritizes complete historical coverage in tests, verifying holidays from their first year of observance (e.g., 1853 for Finland) through future projections, rather than using shorter sliding windows.
Learnt from: KJhellico
PR: vacanza/holidays#2593
File: holidays/countries/senegal.py:66-110
Timestamp: 2025-06-06T14:40:31.932Z
Learning: In the holidays library, within the _populate_public_holidays method, holidays should be arranged by calendar type (Islamic holidays first, then Gregorian holidays) without additional type grouping comments. The organization by calendar type is sufficient and follows the project's established conventions.
Learnt from: PPsyrius
PR: vacanza/holidays#2608
File: holidays/countries/saint_vincent_and_the_grenadines.py:30-30
Timestamp: 2025-06-07T07:37:55.516Z
Learning: For the vacanza/holidays repository, defer to the ruff configuration and pre-commit checks for coding standards rather than making manual suggestions about line length or style issues. If the automated checks pass, the code follows the project's standards.
Learnt from: KJhellico
PR: vacanza/holidays#2684
File: holidays/locale/it/LC_MESSAGES/SM.po:13-13
Timestamp: 2025-06-28T10:39:19.185Z
Learning: In the holidays project, .po file header comments use the format "# [Country] holidays." for default language files (without trailing hash) and "# [Country] holidays [locale] localization." for non-default language files (also without trailing hash).
Learnt from: KJhellico
PR: vacanza/holidays#2530
File: tests/countries/test_andorra.py:23-28
Timestamp: 2025-05-06T21:07:11.577Z
Learning: In the holidays project, test methods for country holidays follow a standard form where year ranges are explicitly recreated in each test method rather than being stored as class variables, to maintain consistency across all country tests.
Learnt from: PPsyrius
PR: vacanza/holidays#2632
File: holidays/countries/solomon_islands.py:95-98
Timestamp: 2025-06-16T12:28:31.641Z
Learning: Library-wide holiday patterns and their optimizations should be handled at the base class level (like InternationalHolidays) rather than documenting workarounds in individual country modules. This maintains separation of concerns and avoids documentation duplication.
Learnt from: PPsyrius
PR: vacanza/holidays#2489
File: holidays/countries/sao_tome_and_principe.py:22-26
Timestamp: 2025-04-23T14:55:35.504Z
Learning: References in holidays classes should only be included if they're used for test case cross-checks or provide historical context about when holidays were added/removed, not just for the sake of having more references.
Learnt from: PPsyrius
PR: vacanza/holidays#2489
File: holidays/countries/sao_tome_and_principe.py:22-26
Timestamp: 2025-04-23T14:55:35.504Z
Learning: References in holidays classes should only be included if they're used for test case cross-checks or provide historical context about when holidays were added/removed, not just for the sake of having more references.
Learnt from: PPsyrius
PR: vacanza/holidays#2642
File: holidays/countries/france.py:178-182
Timestamp: 2025-06-18T10:18:59.447Z
Learning: In the France holidays implementation, deprecated subdivision names like "Alsace-Moselle" and "Saint-Barthélémy" are handled through explicit conditionals in _populate_public_holidays() that map them to their corresponding new subdivision-specific holiday population methods, providing backward compatibility while users transition to the new ISO codes.
Learnt from: PPsyrius
PR: vacanza/holidays#2643
File: holidays/countries/mauritius.py:144-169
Timestamp: 2025-06-19T02:34:18.382Z
Learning: Custom holiday classes that extend _CustomHinduHolidays, _CustomIslamicHolidays, _CustomBuddhistHolidays, etc. in the holidays library do not use docstrings. They follow a pattern of using only inline comments above date dictionaries, as seen in Malaysia, Singapore, UAE, and other country implementations.
Learnt from: PPsyrius
PR: vacanza/holidays#2642
File: tests/countries/test_france.py:24-27
Timestamp: 2025-06-18T10:10:46.158Z
Learning: The holidays library prioritizes full test coverage over performance in test suites. Modern library-wide standards favor comprehensive testing across all subdivisions and wide year ranges (e.g., 1803-2050 for France) to ensure thorough validation, even if it creates many test objects.
README.md (17)
Learnt from: KJhellico
PR: vacanza/holidays#2606
File: README.md:562-568
Timestamp: 2025-06-06T16:02:09.910Z
Learning: The README.md country table displays ISO 3166-1 alpha-2 codes only in the "Code" column. Alpha-3 codes or country aliases should not be included in this table format, maintaining consistency with all other country entries.
Learnt from: KJhellico
PR: vacanza/holidays#2614
File: README.md:108-108
Timestamp: 2025-06-14T20:13:29.536Z
Learning: In the vacanza/holidays repository, the team prefers to manually update the country count in README.md when adding new countries, with tests in place to verify the count stays accurate. They are satisfied with this approach and do not want it automated.
Learnt from: PPsyrius
PR: vacanza/holidays#2638
File: holidays/countries/svalbard_and_jan_mayen.py:1-12
Timestamp: 2025-06-16T11:42:28.293Z
Learning: In the holidays library codebase, country implementation files in holidays/countries/ follow a standard convention of NOT having module-level docstrings. They start with the license header comment block, followed by imports, then class definitions. This is consistent across all country implementations like austria.py, belgium.py, canada.py, etc.
Learnt from: PPsyrius
PR: vacanza/holidays#2489
File: holidays/countries/sao_tome_and_principe.py:1-12
Timestamp: 2025-04-24T04:59:38.436Z
Learning: The holidays library uses a standard file header across country implementation files that includes copyright information, authors, website, and license details. New country implementation files should follow this same header format.
Learnt from: PPsyrius
PR: vacanza/holidays#2489
File: holidays/countries/sao_tome_and_principe.py:1-12
Timestamp: 2025-04-24T04:59:38.436Z
Learning: The holidays library uses a standard file header across country implementation files that includes copyright information, authors, website, and license details. New country implementation files should follow this same header format.
Learnt from: PPsyrius
PR: vacanza/holidays#2402
File: holidays/countries/trinidad_and_tobago.py:25-25
Timestamp: 2025-04-02T04:54:07.204Z
Learning: For English-speaking countries in the holidays library (like Trinidad and Tobago), the `default_language` and `supported_languages` parameters are optional. If languages are added for such countries, ensure that `en_US` is included in the list alongside the regional code variant (e.g., `en_TT` for Trinidad and Tobago).
Learnt from: PPsyrius
PR: vacanza/holidays#2362
File: holidays/ical.py:53-80
Timestamp: 2025-03-26T08:55:08.917Z
Learning: The holidays library intentionally limits language code support to ISO 639-1 and ISO 639-2 standards (2-3 letter language codes with optional region) to maintain consistency with other modules like `common_holidays` and `financial_holidays`, rather than implementing full RFC 5646 compliance.
Learnt from: KJhellico
PR: vacanza/holidays#2375
File: README.md:224-226
Timestamp: 2025-03-26T22:41:55.075Z
Learning: The countries table in README.md uses HTML format consistently throughout, not Markdown.
Learnt from: PPsyrius
PR: vacanza/holidays#2642
File: holidays/countries/france.py:178-182
Timestamp: 2025-06-18T10:18:59.447Z
Learning: In the France holidays implementation, deprecated subdivision names like "Alsace-Moselle" and "Saint-Barthélémy" are handled through explicit conditionals in _populate_public_holidays() that map them to their corresponding new subdivision-specific holiday population methods, providing backward compatibility while users transition to the new ISO codes.
Learnt from: KJhellico
PR: vacanza/holidays#2601
File: README.md:108-108
Timestamp: 2025-06-09T19:39:38.818Z
Learning: The correct way to count supported countries in the holidays library is by counting unique country module files in holidays/countries/ (excluding __init__.py) or by counting entries in the COUNTRIES registry, not by counting individual class definitions which include alias classes.
Learnt from: KJhellico
PR: vacanza/holidays#2651
File: holidays/locale/en_BQ/LC_MESSAGES/BQ.po:13-14
Timestamp: 2025-07-01T17:22:10.578Z
Learning: In .po file headers, commas should be preserved when they are part of the official country/entity name. For example, "Bonaire, Sint Eustatius and Saba" correctly uses commas to separate the three distinct territories that make up this political entity.
Learnt from: PPsyrius
PR: vacanza/holidays#2439
File: holidays/calendars/thai.py:0-0
Timestamp: 2025-04-06T17:44:24.598Z
Learning: When making code suggestions, only include the specific lines that need to be changed in the committable suggestion part, without surrounding unrelated code.
Learnt from: KJhellico
PR: vacanza/holidays#2614
File: holidays/countries/guyana.py:114-116
Timestamp: 2025-06-14T20:36:17.239Z
Learning: In the holidays codebase, message comments should always use en_US spelling conventions, while translatable strings can use appropriate local spellings for the target country/region.
Learnt from: PPsyrius
PR: vacanza/holidays#2608
File: holidays/countries/saint_vincent_and_the_grenadines.py:30-30
Timestamp: 2025-06-07T07:37:55.516Z
Learning: For the vacanza/holidays repository, defer to the ruff configuration and pre-commit checks for coding standards rather than making manual suggestions about line length or style issues. If the automated checks pass, the code follows the project's standards.
Learnt from: PPsyrius
PR: vacanza/holidays#2402
File: holidays/countries/trinidad_and_tobago.py:28-33
Timestamp: 2025-04-02T04:51:17.842Z
Learning: The library convention for country code aliases (like two-letter ISO 3166-1 alpha-2 and three-letter ISO 3166-1 alpha-3 codes) is to implement them as simple pass-through classes without docstrings.
Learnt from: PPsyrius
PR: vacanza/holidays#2402
File: holidays/countries/trinidad_and_tobago.py:28-33
Timestamp: 2025-04-02T04:51:17.842Z
Learning: The library convention for country code aliases (like two-letter ISO 3166-1 alpha-2 and three-letter ISO 3166-1 alpha-3 codes) is to implement them as simple pass-through classes without docstrings.
Learnt from: KJhellico
PR: vacanza/holidays#2483
File: holidays/registry.py:177-177
Timestamp: 2025-04-18T21:13:55.589Z
Learning: In the holidays/registry.py file, COUNTRIES dictionary entries should use the class name (without spaces) as the first element of the tuple (e.g., "TurksAndCaicosIslands"), not the human-readable country name with spaces.
holidays/locale/en_VC/LC_MESSAGES/VC.po (50)
Learnt from: KJhellico
PR: vacanza/holidays#2388
File: holidays/locale/en_CI/LC_MESSAGES/CI.po:88-88
Timestamp: 2025-03-30T18:25:07.087Z
Learning: In the holidays library, localization files have a specific structure: message comments are in standard English (en_US) describing the holiday, while actual translations (msgstr) should use the locale-specific terminology (e.g., en_CI for Ivory Coast English). For example, "Night of Power" in standard English is translated as "Lailatou-Kadr" in Ivory Coast English.
Learnt from: KJhellico
PR: vacanza/holidays#2684
File: holidays/locale/it/LC_MESSAGES/SM.po:13-13
Timestamp: 2025-06-28T10:39:19.185Z
Learning: In the holidays project, .po file header comments use the format "# [Country] holidays." for default language files (without trailing hash) and "# [Country] holidays [locale] localization." for non-default language files (also without trailing hash).
Learnt from: PPsyrius
PR: vacanza/holidays#2388
File: holidays/locale/fr/LC_MESSAGES/CI.po:28-101
Timestamp: 2025-03-30T13:33:31.598Z
Learning: In the holidays library, for localization files of the default language (like French for Ivory Coast in fr/LC_MESSAGES/CI.po), the best practice is to leave the message strings (msgstr) empty to avoid possible typos, since the message IDs (msgid) are already in the target language.
Learnt from: KJhellico
PR: vacanza/holidays#2394
File: holidays/locale/pt_PT/LC_MESSAGES/CV.po:31-88
Timestamp: 2025-03-31T19:37:57.691Z
Learning: In the holidays library localization pattern, when a locale file matches a country's default language (e.g., pt_PT for Cape Verde), the msgstr fields should be left empty. Only non-default language locale files should have translations in the msgstr fields.
Learnt from: KJhellico
PR: vacanza/holidays#2394
File: holidays/locale/pt_PT/LC_MESSAGES/CV.po:31-88
Timestamp: 2025-03-31T19:37:57.691Z
Learning: In the holidays library, when a locale file matches the country's default language (e.g., pt_PT for Cape Verde), the msgstr fields should be left empty. Only non-default language files should have filled msgstr fields with translations.
Learnt from: KJhellico
PR: vacanza/holidays#2259
File: holidays/locale/en_IN/LC_MESSAGES/IN.po:30-299
Timestamp: 2025-03-05T17:51:00.633Z
Learning: In the Holidays project, .po files for a country's default locale use empty msgstr fields as a standard convention.
Learnt from: ankushhKapoor
PR: vacanza/holidays#2601
File: holidays/locale/en_MN/LC_MESSAGES/MN.po:13-14
Timestamp: 2025-06-11T18:32:25.595Z
Learning: For non-default locale `.po` files, the header comment format is:
`# <Country> holidays <locale> localization.` (no trailing hash).
Learnt from: PPsyrius
PR: vacanza/holidays#2438
File: holidays/locale/ar_IQ/LC_MESSAGES/IQ.po:35-81
Timestamp: 2025-04-17T17:08:48.082Z
Learning: In holiday PO files, when the file represents the default language of an entity (e.g., ar_IQ for Iraq), no translations in `msgstr` are required as the `msgid` values are already in the target language.
Learnt from: KJhellico
PR: vacanza/holidays#2530
File: holidays/locale/ca/LC_MESSAGES/AD.po:31-40
Timestamp: 2025-05-06T15:25:44.333Z
Learning: In the Holidays project, msgid fields in localization files contain strings in the entity's default language (as defined by default_language attribute), not English source strings as in standard gettext implementations.
Learnt from: KJhellico
PR: vacanza/holidays#2687
File: holidays/locale/en_US/LC_MESSAGES/CF.po:13-28
Timestamp: 2025-06-29T09:37:35.283Z
Learning: In the holidays project, .po files follow a standard formatting convention where there is always a blank line after the metadata header section (after the "X-Source-Language" line). This blank line separates the header from the actual translation content and should not be removed.
Learnt from: PPsyrius
PR: vacanza/holidays#2407
File: snapshots/countries/TL_COMMON.json:7-7
Timestamp: 2025-04-03T05:59:57.480Z
Learning: In the holidays project, snapshot files (like snapshots/countries/TL_COMMON.json) are auto-generated when running `make snapshot` and should not be manually edited. Semicolons (;) in holiday entries are used as separators when multiple holidays occur on the same date.
Learnt from: KJhellico
PR: vacanza/holidays#2501
File: scripts/docs/gen_index.py:1-12
Timestamp: 2025-04-26T19:55:09.581Z
Learning: The holidays project uses a standard header for all Python (.py) files in the repository that describes the overall holidays library, including authors, website and license information, regardless of the specific purpose of individual script files.
Learnt from: PPsyrius
PR: vacanza/holidays#2642
File: holidays/countries/french_polynesia.py:1-12
Timestamp: 2025-06-19T05:54:49.792Z
Learning: The holidays library uses a standard file header format across all country implementation files consisting of a comprehensive comment block with project description, authors, website, and license information. Country files do not use module-level docstrings but instead rely on this header format followed by class-level docstrings.
Learnt from: KJhellico
PR: vacanza/holidays#2608
File: holidays/locale/en_VC/LC_MESSAGES/VC.po:1-14
Timestamp: 2025-06-10T12:17:58.880Z
Learning: In the holidays project, .po files should use the full multi-line header format including the project description, authors, website, and license information, rather than a single-line comment format.
Learnt from: PPsyrius
PR: vacanza/holidays#2489
File: holidays/countries/sao_tome_and_principe.py:86-88
Timestamp: 2025-04-23T09:22:41.753Z
Learning: For holiday definitions in the holidays package, keep comments simple with just the holiday name (e.g., "# Independence Day.") rather than including dates or historical context, as the function names already encode the date information.
Learnt from: PPsyrius
PR: vacanza/holidays#2537
File: holidays/countries/finland.py:0-0
Timestamp: 2025-05-10T04:32:15.760Z
Learning: In the holidays package, detailed historical context and additional information should be added as comments at the method level or above conditional blocks, while comments directly above tr() function calls should only contain the holiday name itself (e.g., "# Independence Day.").
Learnt from: PPsyrius
PR: vacanza/holidays#2608
File: holidays/countries/saint_vincent_and_the_grenadines.py:30-30
Timestamp: 2025-06-07T07:37:55.516Z
Learning: For the vacanza/holidays repository, defer to the ruff configuration and pre-commit checks for coding standards rather than making manual suggestions about line length or style issues. If the automated checks pass, the code follows the project's standards.
Learnt from: KJhellico
PR: vacanza/holidays#2654
File: holidays/countries/cape_verde.py:1-12
Timestamp: 2025-06-21T16:30:12.749Z
Learning: The holidays project does not use module docstrings in country holiday files. All country files start directly with the copyright header comment block without module docstrings, maintaining a consistent coding style across the project.
Learnt from: KJhellico
PR: vacanza/holidays#2608
File: tests/countries/test_saint_vincent_and_the_grenadines.py:162-178
Timestamp: 2025-07-02T18:21:59.302Z
Learning: In the Saint Vincent and the Grenadines holiday tests, for holidays without observed rules that only require a single assertHolidayName call, pass the holiday name directly as a string literal rather than storing it in a variable first for cleaner, more concise code.
Learnt from: KJhellico
PR: vacanza/holidays#2608
File: tests/countries/test_saint_vincent_and_the_grenadines.py:162-178
Timestamp: 2025-07-02T18:17:53.342Z
Learning: In the Saint Vincent and the Grenadines holidays implementation, New Year's Day is added without observed rules using `_add_new_years_day()` and should not include observed rule testing in its test method. Only holidays explicitly wrapped with `_add_observed()` have observed behavior.
Learnt from: kritibirda26
PR: vacanza/holidays#2395
File: holidays/countries/antigua_and_barbuda.py:68-75
Timestamp: 2025-03-31T14:19:13.901Z
Learning: For Antigua and Barbuda holidays, Carnival Tuesday should only be considered a holiday for years after 2005 (not including 2005 itself) because the 2005 amendment was passed on September 15th, which is after the August Carnival celebrations that year.
Learnt from: PPsyrius
PR: vacanza/holidays#2537
File: holidays/countries/finland.py:249-253
Timestamp: 2025-05-10T04:02:13.815Z
Learning: Holiday name comments directly above tr() function calls in the holidays package should only contain the holiday name itself (e.g., "# Independence Day.") without any additional context, dates, or historical information.
Learnt from: PPsyrius
PR: vacanza/holidays#2615
File: tests/countries/test_anguilla.py:52-64
Timestamp: 2025-06-15T10:15:39.883Z
Learning: In the Anguilla holidays implementation, March 2 only has "James Ronald Webster Day" (from 2010 onwards). There is no "Sovereignty Day" holiday on this date. Queen's/King's Birthday holidays are in June, not March.
Learnt from: PPsyrius
PR: vacanza/holidays#2608
File: holidays/locale/en_VC/LC_MESSAGES/VC.po:61-66
Timestamp: 2025-06-10T05:07:29.372Z
Learning: For missing translator comments in .po localization files in the holidays repository, direct authors to run `make l10n` or `make check` commands instead of suggesting manual fixes, as these commands automatically handle translator comment generation.
Learnt from: PPsyrius
PR: vacanza/holidays#2608
File: holidays/locale/en_US/LC_MESSAGES/VC.po:76-76
Timestamp: 2025-06-10T05:08:07.939Z
Learning: For the holidays project, localization file formatting issues (like missing terminal periods in .po files) should be automatically fixed by running `make l10n` command (which is included in `make check`). Authors should be directed to use this automated tooling instead of manual formatting fixes.
Learnt from: KJhellico
PR: vacanza/holidays#2676
File: holidays/locale/en_US/LC_MESSAGES/TN.po:17-28
Timestamp: 2025-06-26T15:34:35.476Z
Learning: In the holidays project, .po file header metadata updates (version numbers, revision dates, translator information) are legitimate changes when part of localization work and don't require `make l10n` regeneration. The `make l10n` command is primarily for formatting fixes and missing translator comments, not for intentional metadata updates.
Learnt from: PPsyrius
PR: vacanza/holidays#2537
File: holidays/countries/finland.py:195-199
Timestamp: 2025-05-09T18:34:33.990Z
Learning: In the holidays library, localization (l10n) is handled through separate .po files for different languages rather than combining multiple translations in a single string. The code should use the default language with tr() function, and translations are provided in language-specific .po files.
Learnt from: KJhellico
PR: vacanza/holidays#2524
File: holidays/countries/grenada.py:81-83
Timestamp: 2025-05-03T20:16:58.203Z
Learning: In the Vacanza holidays library, localization (l10n) comments are always written in American English (en_US locale), even when the translatable strings use different regional spellings. For example, comments use "Labor Day" while the corresponding translatable string might use "Labour Day".
Learnt from: KJhellico
PR: vacanza/holidays#2614
File: holidays/countries/guyana.py:114-116
Timestamp: 2025-06-14T20:36:17.239Z
Learning: In the holidays codebase, message comments should always use en_US spelling conventions, while translatable strings can use appropriate local spellings for the target country/region.
Learnt from: KJhellico
PR: vacanza/holidays#2459
File: holidays/locale/en_HK/LC_MESSAGES/HK.po:190-191
Timestamp: 2025-04-10T10:58:12.704Z
Learning: The maximum line length for .po files in the holidays repository is 99 characters. Comment lines should be consolidated only if the resulting line doesn't exceed this limit.
Learnt from: KJhellico
PR: vacanza/holidays#2607
File: scripts/l10n/l10n_helper.py:86-88
Timestamp: 2025-06-06T15:23:42.337Z
Learning: The scripts/l10n/l10n_helper.py script is an internal localization helper tool intended for use by developers who understand the codebase, so additional safety checks may not be necessary.
Learnt from: PPsyrius
PR: vacanza/holidays#2642
File: snapshots/countries/FR_MF.json:658-662
Timestamp: 2025-06-18T10:36:52.263Z
Learning: Snapshot files in the `snapshots/` directory are auto-generated by the `make snapshot` command and use `en_US` locale when the countries/markets entities support localization (l10n). The localization happens at the application level, not in the snapshot files themselves.
Learnt from: PPsyrius
PR: vacanza/holidays#2398
File: holidays/groups/islamic.py:301-301
Timestamp: 2025-04-01T14:14:01.519Z
Learning: Running `make pre-commit` in the holidays project can automatically fix common code style issues like whitespace in blank lines.
Learnt from: PPsyrius
PR: vacanza/holidays#2599
File: holidays/countries/__init__.py:193-193
Timestamp: 2025-06-05T09:31:22.753Z
Learning: For the holidays Python library, when encountering line length or formatting issues, suggest contributors run `make pre-commit` to auto-format their files instead of providing specific manual formatting fixes like line splitting or noqa comments.
Learnt from: KJhellico
PR: vacanza/holidays#2607
File: scripts/l10n/l10n_helper.py:147-150
Timestamp: 2025-06-06T15:22:39.950Z
Learning: In the holidays project localization system, all .po files are generated from the same .pot template for all supported languages, ensuring that all msgids exist for all languages. This makes defensive programming for missing language keys in po_data[msgid] unnecessary in the normal workflow.
Learnt from: PPsyrius
PR: vacanza/holidays#2537
File: holidays/locale/sv_FI/LC_MESSAGES/AX.po:17-27
Timestamp: 2025-05-10T04:34:02.406Z
Learning: The `Plural-Forms` header isn't used in .po file generation for the holidays project and doesn't need to be manually added to localization files.
Learnt from: PPsyrius
PR: vacanza/holidays#2489
File: holidays/countries/sao_tome_and_principe.py:1-12
Timestamp: 2025-04-24T04:59:38.436Z
Learning: The holidays library uses a standard file header across country implementation files that includes copyright information, authors, website, and license details. New country implementation files should follow this same header format.
Learnt from: PPsyrius
PR: vacanza/holidays#2489
File: holidays/countries/sao_tome_and_principe.py:1-12
Timestamp: 2025-04-24T04:59:38.436Z
Learning: The holidays library uses a standard file header across country implementation files that includes copyright information, authors, website, and license details. New country implementation files should follow this same header format.
Learnt from: PPsyrius
PR: vacanza/holidays#2407
File: holidays/locale/en_TL/LC_MESSAGES/TL.po:42-44
Timestamp: 2025-04-03T05:58:00.033Z
Learning: The en_TL (English for Timor-Leste) localization for holidays intentionally uses "World" instead of "International" (e.g., "World Labour Day") to maintain accuracy with official Timor-Leste government sources, even though code comments and other localizations like en_US use "International".
Learnt from: PPsyrius
PR: vacanza/holidays#2407
File: holidays/locale/en_TL/LC_MESSAGES/TL.po:42-44
Timestamp: 2025-04-03T05:58:00.033Z
Learning: The en_TL (English for Timor-Leste) localization for holidays intentionally uses "World" instead of "International" (e.g., "World Labour Day") to maintain accuracy with official Timor-Leste government sources, even though code comments and other localizations like en_US use "International".
Learnt from: Wasif-Shahzad
PR: vacanza/holidays#2385
File: holidays/countries/pakistan.py:59-60
Timestamp: 2025-03-31T11:50:50.488Z
Learning: In the holidays library, function names and comments follow en_US spelling conventions (e.g., "Labor Day"), while the default strings may use different locale conventions (e.g., "Labour Day" for en_PK) and are translated appropriately using the gettext function.
Learnt from: KJhellico
PR: vacanza/holidays#2259
File: holidays/locale/en_IN/LC_MESSAGES/IN.po:285-299
Timestamp: 2025-03-08T11:28:48.652Z
Learning: In the holidays project, message IDs (msgids) in locale files use region-specific naming conventions (e.g., "Muharram", "Id-ul-Fitr" in en_IN locale for India), while translator comments use internationally recognized names from the project's default locale (en_US) such as "Ashura", "Eid al-Fitr". This difference is intentional for proper localization.
Learnt from: PPsyrius
PR: vacanza/holidays#2654
File: holidays/locale/de/LC_MESSAGES/CV.po:37-40
Timestamp: 2025-07-04T08:54:03.168Z
Learning: In German localization for Cape Verde holidays, "Dia da Nacionalidade e dos Heróis Nacionais" is translated as "Tag der Nationalhelden" (not "Tag der Nationalität und der Nationalhelden") based on authoritative German language sources about Cape Verde holidays, specifically from feelcaboverde.com.
Learnt from: PPsyrius
PR: vacanza/holidays#2654
File: holidays/locale/de/LC_MESSAGES/CV.po:37-40
Timestamp: 2025-07-04T08:54:03.168Z
Learning: In German localization for Cape Verde holidays, "Dia da Nacionalidade e dos Heróis Nacionais" is translated as "Tag der Nationalhelden" (not "Tag der Nationalität und der Nationalhelden") based on authoritative German language sources about Cape Verde holidays, specifically from feelcaboverde.com.
Learnt from: KJhellico
PR: vacanza/holidays#2465
File: holidays/locale/nl/LC_MESSAGES/SR.po:31-32
Timestamp: 2025-04-13T19:11:32.337Z
Learning: In the holidays library, when a language is set as the default language for a country (like Dutch/nl for Suriname), the `msgid` strings in the PO file are already in that language, and the corresponding `msgstr` fields are intentionally left empty. This is by design, as the system will fall back to using the `msgid` value when no translation is provided.
Learnt from: PPsyrius
PR: vacanza/holidays#2676
File: holidays/locale/ar/LC_MESSAGES/EG.po:0-0
Timestamp: 2025-06-25T10:09:29.029Z
Learning: In the holidays library, msgstr fields can be left empty for source/default_language files when using Lingva, the localization tool used by the project.
Learnt from: KJhellico
PR: vacanza/holidays#2651
File: holidays/locale/nl/LC_MESSAGES/BQ.po:29-95
Timestamp: 2025-06-25T20:55:00.642Z
Learning: In the holidays library, Dutch locale files (.po) with `X-Source-Language: nl` should have empty msgstr entries when the target language is also Dutch. The library uses fallback=True with gettext, which returns the original msgid when msgstr is empty. This is the correct pattern for native language files and does not cause blank holiday names.
Learnt from: KJhellico
PR: vacanza/holidays#2398
File: holidays/locale/fr/LC_MESSAGES/GN.po:31-83
Timestamp: 2025-03-31T20:25:12.808Z
Learning: In the holidays library, French (fr) is the default language for Guinea. This means that message IDs (msgid) in the PO files are already in French, and message strings (msgstr) in the French locale files can remain empty, as no translation is needed.
Learnt from: KJhellico
PR: vacanza/holidays#2629
File: holidays/countries/namibia.py:70-73
Timestamp: 2025-06-14T11:04:24.104Z
Learning: In Namibia's holiday system, Genocide Remembrance Day (May 28, starting 2025) is implemented as a fixed commemorative date without observed day handling (_add_observed), indicating it should be observed on May 28th regardless of the day of the week, similar to other commemorative holidays like Good Friday and Christmas Day.
Learnt from: KJhellico
PR: vacanza/holidays#2629
File: holidays/countries/namibia.py:70-73
Timestamp: 2025-06-14T11:04:24.104Z
Learning: In Namibia's holiday system, holidays declared by presidential proclamation under Section 1(3) of the Public Holidays Act may not automatically be subject to the Sunday-to-Monday observation rule in Section 1(2), which primarily applies to holidays listed in the Schedule. Genocide Remembrance Day (May 28) starting in 2025 is treated as a fixed commemorative date without observed day handling.
snapshots/countries/VC_COMMON.json (18)
Learnt from: PPsyrius
PR: vacanza/holidays#2407
File: snapshots/countries/TL_COMMON.json:7-7
Timestamp: 2025-04-03T05:59:57.480Z
Learning: In the holidays project, snapshot files (like snapshots/countries/TL_COMMON.json) are auto-generated when running `make snapshot` and should not be manually edited. Semicolons (;) in holiday entries are used as separators when multiple holidays occur on the same date.
Learnt from: KJhellico
PR: vacanza/holidays#2654
File: snapshots/countries/CV_RS.json:471-478
Timestamp: 2025-06-24T17:26:17.728Z
Learning: Snapshot files in the holidays library (like those in snapshots/countries/) are generated automatically and should not be manually edited. Any issues with snapshot content should be addressed in the source code that generates them, not in the snapshot files themselves.
Learnt from: KJhellico
PR: vacanza/holidays#2608
File: tests/countries/test_saint_vincent_and_the_grenadines.py:162-178
Timestamp: 2025-07-02T18:21:59.302Z
Learning: In the Saint Vincent and the Grenadines holiday tests, for holidays without observed rules that only require a single assertHolidayName call, pass the holiday name directly as a string literal rather than storing it in a variable first for cleaner, more concise code.
Learnt from: KJhellico
PR: vacanza/holidays#2608
File: tests/countries/test_saint_vincent_and_the_grenadines.py:162-178
Timestamp: 2025-07-02T18:17:53.342Z
Learning: In the Saint Vincent and the Grenadines holidays implementation, New Year's Day is added without observed rules using `_add_new_years_day()` and should not include observed rule testing in its test method. Only holidays explicitly wrapped with `_add_observed()` have observed behavior.
Learnt from: PPsyrius
PR: vacanza/holidays#2349
File: snapshots/countries/TW_COMMON.json:9-12
Timestamp: 2025-03-13T07:50:10.598Z
Learning: JSON files in the `snapshots/` directory (like `snapshots/countries/TW_COMMON.json`) are automatically generated by the `make snapshot` command and not meant to be manually edited.
Learnt from: PPsyrius
PR: vacanza/holidays#2354
File: holidays/countries/fiji.py:185-188
Timestamp: 2025-03-19T16:53:00.375Z
Learning: In the Fiji holidays implementation, the `special_public_holidays_observed` dictionary in `FijiStaticHolidays` is only used for exceptions to the normal observance rules, not for documenting all holidays. Only 2019's Constitution Day needed a special entry as it didn't follow the standard patterns.
Learnt from: PPsyrius
PR: vacanza/holidays#2489
File: holidays/countries/sao_tome_and_principe.py:1-12
Timestamp: 2025-04-24T04:59:38.436Z
Learning: The holidays library uses a standard file header across country implementation files that includes copyright information, authors, website, and license details. New country implementation files should follow this same header format.
Learnt from: PPsyrius
PR: vacanza/holidays#2489
File: holidays/countries/sao_tome_and_principe.py:1-12
Timestamp: 2025-04-24T04:59:38.436Z
Learning: The holidays library uses a standard file header across country implementation files that includes copyright information, authors, website, and license details. New country implementation files should follow this same header format.
Learnt from: PPsyrius
PR: vacanza/holidays#2642
File: holidays/countries/french_polynesia.py:1-12
Timestamp: 2025-06-19T05:54:49.792Z
Learning: The holidays library uses a standard file header format across all country implementation files consisting of a comprehensive comment block with project description, authors, website, and license information. Country files do not use module-level docstrings but instead rely on this header format followed by class-level docstrings.
Learnt from: PPsyrius
PR: vacanza/holidays#2643
File: holidays/countries/mauritius.py:144-169
Timestamp: 2025-06-19T02:34:18.382Z
Learning: Custom holiday classes that extend _CustomHinduHolidays, _CustomIslamicHolidays, _CustomBuddhistHolidays, etc. in the holidays library do not use docstrings. They follow a pattern of using only inline comments above date dictionaries, as seen in Malaysia, Singapore, UAE, and other country implementations.
Learnt from: PPsyrius
PR: vacanza/holidays#2354
File: holidays/countries/fiji.py:146-159
Timestamp: 2025-03-19T16:54:58.657Z
Learning: In the holidays library implementation, explicit holiday dates (like Diwali in Fiji) are only defined for historical years with official sources (2016-2025). Future dates beyond the explicitly defined range are automatically calculated by methods like `_add_diwali`, which provide approximations when official dates aren't yet available.
Learnt from: KJhellico
PR: vacanza/holidays#2354
File: holidays/countries/fiji.py:171-183
Timestamp: 2025-03-29T15:15:05.919Z
Learning: In the Fiji holidays implementation, the maintainers are aware of the need to extend the MAWLID_DATES dictionary beyond 2025 when future official references become available, and will do so when appropriate. No suggestions about extending this dictionary should be made in future reviews.
Learnt from: PPsyrius
PR: vacanza/holidays#2537
File: tests/countries/test_finland.py:23-26
Timestamp: 2025-05-09T18:36:09.607Z
Learning: The holidays project prioritizes complete historical coverage in tests, verifying holidays from their first year of observance (e.g., 1853 for Finland) through future projections, rather than using shorter sliding windows.
Learnt from: PPsyrius
PR: vacanza/holidays#2609
File: holidays/countries/nauru.py:48-50
Timestamp: 2025-06-14T11:05:21.250Z
Learning: In the holidays library, newer implementations use `start_year` to indicate the earliest year with complete holiday data coverage, not necessarily the first year a holiday existed. If a holiday system starts partway through a year (like Nauru's Public Holidays Act starting Jan 31, 1968), the start_year should be set to the following year (1969) to ensure users get full annual holiday coverage.
Learnt from: PPsyrius
PR: vacanza/holidays#2615
File: tests/countries/test_anguilla.py:52-64
Timestamp: 2025-06-15T10:15:39.883Z
Learning: In the Anguilla holidays implementation, March 2 only has "James Ronald Webster Day" (from 2010 onwards). There is no "Sovereignty Day" holiday on this date. Queen's/King's Birthday holidays are in June, not March.
Learnt from: PPsyrius
PR: vacanza/holidays#2489
File: holidays/countries/sao_tome_and_principe.py:86-88
Timestamp: 2025-04-23T09:22:41.753Z
Learning: For holiday definitions in the holidays package, keep comments simple with just the holiday name (e.g., "# Independence Day.") rather than including dates or historical context, as the function names already encode the date information.
Learnt from: PPsyrius
PR: vacanza/holidays#2629
File: tests/countries/test_namibia.py:22-23
Timestamp: 2025-06-14T10:58:43.636Z
Learning: In the vacanza/holidays project, country test files consistently use range(start_year, 2050) which intentionally excludes 2050 and stops at 2049. This is a library-wide implementation pattern, not an off-by-one error.
Learnt from: KJhellico
PR: vacanza/holidays#2530
File: tests/countries/test_andorra.py:23-28
Timestamp: 2025-05-06T21:07:11.577Z
Learning: In the holidays project, test methods for country holidays follow a standard form where year ranges are explicitly recreated in each test method rather than being stored as class variables, to maintain consistency across all country tests.
holidays/locale/en_US/LC_MESSAGES/VC.po (43)
Learnt from: KJhellico
PR: vacanza/holidays#2388
File: holidays/locale/en_CI/LC_MESSAGES/CI.po:88-88
Timestamp: 2025-03-30T18:25:07.087Z
Learning: In the holidays library, localization files have a specific structure: message comments are in standard English (en_US) describing the holiday, while actual translations (msgstr) should use the locale-specific terminology (e.g., en_CI for Ivory Coast English). For example, "Night of Power" in standard English is translated as "Lailatou-Kadr" in Ivory Coast English.
Learnt from: KJhellico
PR: vacanza/holidays#2684
File: holidays/locale/it/LC_MESSAGES/SM.po:13-13
Timestamp: 2025-06-28T10:39:19.185Z
Learning: In the holidays project, .po file header comments use the format "# [Country] holidays." for default language files (without trailing hash) and "# [Country] holidays [locale] localization." for non-default language files (also without trailing hash).
Learnt from: KJhellico
PR: vacanza/holidays#2524
File: holidays/countries/grenada.py:81-83
Timestamp: 2025-05-03T20:16:58.203Z
Learning: In the Vacanza holidays library, localization (l10n) comments are always written in American English (en_US locale), even when the translatable strings use different regional spellings. For example, comments use "Labor Day" while the corresponding translatable string might use "Labour Day".
Learnt from: ankushhKapoor
PR: vacanza/holidays#2601
File: holidays/locale/en_MN/LC_MESSAGES/MN.po:13-14
Timestamp: 2025-06-11T18:32:25.595Z
Learning: For non-default locale `.po` files, the header comment format is:
`# <Country> holidays <locale> localization.` (no trailing hash).
Learnt from: KJhellico
PR: vacanza/holidays#2402
File: holidays/countries/trinidad_and_tobago.py:75-76
Timestamp: 2025-04-05T09:44:39.998Z
Learning: In the holidays library, en_US locale is the standard for localization comments (using American English spelling like "Labor"), while the actual holiday names in code use the appropriate locale-specific spelling (like "Labour" for British English locales such as en_TT).
Learnt from: KJhellico
PR: vacanza/holidays#2608
File: tests/countries/test_saint_vincent_and_the_grenadines.py:162-178
Timestamp: 2025-07-02T18:21:59.302Z
Learning: In the Saint Vincent and the Grenadines holiday tests, for holidays without observed rules that only require a single assertHolidayName call, pass the holiday name directly as a string literal rather than storing it in a variable first for cleaner, more concise code.
Learnt from: KJhellico
PR: vacanza/holidays#2394
File: holidays/locale/pt_PT/LC_MESSAGES/CV.po:31-88
Timestamp: 2025-03-31T19:37:57.691Z
Learning: In the holidays library localization pattern, when a locale file matches a country's default language (e.g., pt_PT for Cape Verde), the msgstr fields should be left empty. Only non-default language locale files should have translations in the msgstr fields.
Learnt from: PPsyrius
PR: vacanza/holidays#2402
File: holidays/locale/en_TT/LC_MESSAGES/TT.po:46-48
Timestamp: 2025-04-05T08:12:19.986Z
Learning: In the holidays library, localization (PO) files follow this convention: comments (#.) always use American English (en_US) spelling, while the msgid content follows the locale-specific spelling standards of the target language.
Learnt from: PPsyrius
PR: vacanza/holidays#2388
File: holidays/locale/fr/LC_MESSAGES/CI.po:28-101
Timestamp: 2025-03-30T13:33:31.598Z
Learning: In the holidays library, for localization files of the default language (like French for Ivory Coast in fr/LC_MESSAGES/CI.po), the best practice is to leave the message strings (msgstr) empty to avoid possible typos, since the message IDs (msgid) are already in the target language.
Learnt from: KJhellico
PR: vacanza/holidays#2394
File: holidays/locale/pt_PT/LC_MESSAGES/CV.po:31-88
Timestamp: 2025-03-31T19:37:57.691Z
Learning: In the holidays library, when a locale file matches the country's default language (e.g., pt_PT for Cape Verde), the msgstr fields should be left empty. Only non-default language files should have filled msgstr fields with translations.
Learnt from: KJhellico
PR: vacanza/holidays#2687
File: holidays/locale/en_US/LC_MESSAGES/CF.po:13-28
Timestamp: 2025-06-29T09:37:35.283Z
Learning: In the holidays project, .po files follow a standard formatting convention where there is always a blank line after the metadata header section (after the "X-Source-Language" line). This blank line separates the header from the actual translation content and should not be removed.
Learnt from: PPsyrius
PR: vacanza/holidays#2608
File: holidays/locale/en_VC/LC_MESSAGES/VC.po:61-66
Timestamp: 2025-06-10T05:07:29.372Z
Learning: For missing translator comments in .po localization files in the holidays repository, direct authors to run `make l10n` or `make check` commands instead of suggesting manual fixes, as these commands automatically handle translator comment generation.
Learnt from: KJhellico
PR: vacanza/holidays#2676
File: holidays/locale/en_US/LC_MESSAGES/TN.po:17-28
Timestamp: 2025-06-26T15:34:35.476Z
Learning: In the holidays project, .po file header metadata updates (version numbers, revision dates, translator information) are legitimate changes when part of localization work and don't require `make l10n` regeneration. The `make l10n` command is primarily for formatting fixes and missing translator comments, not for intentional metadata updates.
Learnt from: PPsyrius
PR: vacanza/holidays#2608
File: holidays/locale/en_US/LC_MESSAGES/VC.po:76-76
Timestamp: 2025-06-10T05:08:07.939Z
Learning: For the holidays project, localization file formatting issues (like missing terminal periods in .po files) should be automatically fixed by running `make l10n` command (which is included in `make check`). Authors should be directed to use this automated tooling instead of manual formatting fixes.
Learnt from: PPsyrius
PR: vacanza/holidays#2438
File: holidays/locale/ar_IQ/LC_MESSAGES/IQ.po:35-81
Timestamp: 2025-04-17T17:08:48.082Z
Learning: In holiday PO files, when the file represents the default language of an entity (e.g., ar_IQ for Iraq), no translations in `msgstr` are required as the `msgid` values are already in the target language.
Learnt from: KJhellico
PR: vacanza/holidays#2608
File: holidays/locale/en_VC/LC_MESSAGES/VC.po:1-14
Timestamp: 2025-06-10T12:17:58.880Z
Learning: In the holidays project, .po files should use the full multi-line header format including the project description, authors, website, and license information, rather than a single-line comment format.
Learnt from: KJhellico
PR: vacanza/holidays#2259
File: holidays/locale/en_IN/LC_MESSAGES/IN.po:30-299
Timestamp: 2025-03-05T17:51:00.633Z
Learning: In the Holidays project, .po files for a country's default locale use empty msgstr fields as a standard convention.
Learnt from: KJhellico
PR: vacanza/holidays#2651
File: holidays/locale/nl/LC_MESSAGES/BQ.po:29-95
Timestamp: 2025-06-25T20:55:00.642Z
Learning: In the holidays library, Dutch locale files (.po) with `X-Source-Language: nl` should have empty msgstr entries when the target language is also Dutch. The library uses fallback=True with gettext, which returns the original msgid when msgstr is empty. This is the correct pattern for native language files and does not cause blank holiday names.
Learnt from: PPsyrius
PR: vacanza/holidays#2407
File: snapshots/countries/TL_COMMON.json:7-7
Timestamp: 2025-04-03T05:59:57.480Z
Learning: In the holidays project, snapshot files (like snapshots/countries/TL_COMMON.json) are auto-generated when running `make snapshot` and should not be manually edited. Semicolons (;) in holiday entries are used as separators when multiple holidays occur on the same date.
Learnt from: KJhellico
PR: vacanza/holidays#2501
File: scripts/docs/gen_index.py:1-12
Timestamp: 2025-04-26T19:55:09.581Z
Learning: The holidays project uses a standard header for all Python (.py) files in the repository that describes the overall holidays library, including authors, website and license information, regardless of the specific purpose of individual script files.
Learnt from: PPsyrius
PR: vacanza/holidays#2642
File: holidays/countries/french_polynesia.py:1-12
Timestamp: 2025-06-19T05:54:49.792Z
Learning: The holidays library uses a standard file header format across all country implementation files consisting of a comprehensive comment block with project description, authors, website, and license information. Country files do not use module-level docstrings but instead rely on this header format followed by class-level docstrings.
Learnt from: PPsyrius
PR: vacanza/holidays#2489
File: holidays/countries/sao_tome_and_principe.py:86-88
Timestamp: 2025-04-23T09:22:41.753Z
Learning: For holiday definitions in the holidays package, keep comments simple with just the holiday name (e.g., "# Independence Day.") rather than including dates or historical context, as the function names already encode the date information.
Learnt from: PPsyrius
PR: vacanza/holidays#2537
File: holidays/countries/finland.py:0-0
Timestamp: 2025-05-10T04:32:15.760Z
Learning: In the holidays package, detailed historical context and additional information should be added as comments at the method level or above conditional blocks, while comments directly above tr() function calls should only contain the holiday name itself (e.g., "# Independence Day.").
Learnt from: PPsyrius
PR: vacanza/holidays#2608
File: holidays/countries/saint_vincent_and_the_grenadines.py:30-30
Timestamp: 2025-06-07T07:37:55.516Z
Learning: For the vacanza/holidays repository, defer to the ruff configuration and pre-commit checks for coding standards rather than making manual suggestions about line length or style issues. If the automated checks pass, the code follows the project's standards.
Learnt from: KJhellico
PR: vacanza/holidays#2654
File: holidays/countries/cape_verde.py:1-12
Timestamp: 2025-06-21T16:30:12.749Z
Learning: The holidays project does not use module docstrings in country holiday files. All country files start directly with the copyright header comment block without module docstrings, maintaining a consistent coding style across the project.
Learnt from: PPsyrius
PR: vacanza/holidays#2654
File: holidays/locale/de/LC_MESSAGES/CV.po:57-60
Timestamp: 2025-07-04T08:53:54.095Z
Learning: For Cape Verde German localization, holiday translations should follow Cape Verde-specific German terminology as found in sources like feelcaboverde.com, rather than standard German usage. The German translation choices are source-specific to Cape Verde context.
Learnt from: PPsyrius
PR: vacanza/holidays#2537
File: holidays/countries/finland.py:249-253
Timestamp: 2025-05-10T04:02:13.815Z
Learning: Holiday name comments directly above tr() function calls in the holidays package should only contain the holiday name itself (e.g., "# Independence Day.") without any additional context, dates, or historical information.
Learnt from: KJhellico
PR: vacanza/holidays#2608
File: tests/countries/test_saint_vincent_and_the_grenadines.py:162-178
Timestamp: 2025-07-02T18:17:53.342Z
Learning: In the Saint Vincent and the Grenadines holidays implementation, New Year's Day is added without observed rules using `_add_new_years_day()` and should not include observed rule testing in its test method. Only holidays explicitly wrapped with `_add_observed()` have observed behavior.
Learnt from: KJhellico
PR: vacanza/holidays#2614
File: holidays/countries/guyana.py:114-116
Timestamp: 2025-06-14T20:36:17.239Z
Learning: In the holidays codebase, message comments should always use en_US spelling conventions, while translatable strings can use appropriate local spellings for the target country/region.
Learnt from: KJhellico
PR: vacanza/holidays#2607
File: scripts/l10n/l10n_helper.py:86-88
Timestamp: 2025-06-06T15:23:42.337Z
Learning: The scripts/l10n/l10n_helper.py script is an internal localization helper tool intended for use by developers who understand the codebase, so additional safety checks may not be necessary.
Learnt from: PPsyrius
PR: vacanza/holidays#2537
File: holidays/countries/finland.py:195-199
Timestamp: 2025-05-09T18:34:33.990Z
Learning: In the holidays library, localization (l10n) is handled through separate .po files for different languages rather than combining multiple translations in a single string. The code should use the default language with tr() function, and translations are provided in language-specific .po files.
Learnt from: PPsyrius
PR: vacanza/holidays#2642
File: snapshots/countries/FR_MF.json:658-662
Timestamp: 2025-06-18T10:36:52.263Z
Learning: Snapshot files in the `snapshots/` directory are auto-generated by the `make snapshot` command and use `en_US` locale when the countries/markets entities support localization (l10n). The localization happens at the application level, not in the snapshot files themselves.
Learnt from: PPsyrius
PR: vacanza/holidays#2398
File: holidays/groups/islamic.py:301-301
Timestamp: 2025-04-01T14:14:01.519Z
Learning: Running `make pre-commit` in the holidays project can automatically fix common code style issues like whitespace in blank lines.
Learnt from: PPsyrius
PR: vacanza/holidays#2599
File: holidays/countries/__init__.py:193-193
Timestamp: 2025-06-05T09:31:22.753Z
Learning: For the holidays Python library, when encountering line length or formatting issues, suggest contributors run `make pre-commit` to auto-format their files instead of providing specific manual formatting fixes like line splitting or noqa comments.
Learnt from: KJhellico
PR: vacanza/holidays#2607
File: scripts/l10n/l10n_helper.py:147-150
Timestamp: 2025-06-06T15:22:39.950Z
Learning: In the holidays project localization system, all .po files are generated from the same .pot template for all supported languages, ensuring that all msgids exist for all languages. This makes defensive programming for missing language keys in po_data[msgid] unnecessary in the normal workflow.
Learnt from: PPsyrius
PR: vacanza/holidays#2594
File: holidays/countries/micronesia.py:25-30
Timestamp: 2025-06-04T11:06:21.179Z
Learning: In the holidays repository, line length formatting should defer to pre-commit formatting checks rather than manual suggestions. If pre-commit allows it, the formatting is acceptable per project policy.
Learnt from: KJhellico
PR: vacanza/holidays#2614
File: README.md:108-108
Timestamp: 2025-06-14T20:13:29.536Z
Learning: In the vacanza/holidays repository, the team prefers to manually update the country count in README.md when adding new countries, with tests in place to verify the count stays accurate. They are satisfied with this approach and do not want it automated.
Learnt from: PPsyrius
PR: vacanza/holidays#2439
File: holidays/calendars/thai.py:0-0
Timestamp: 2025-04-06T17:44:24.598Z
Learning: When making code suggestions, only include the specific lines that need to be changed in the committable suggestion part, without surrounding unrelated code.
Learnt from: KJhellico
PR: vacanza/holidays#2259
File: holidays/locale/en_IN/LC_MESSAGES/IN.po:285-299
Timestamp: 2025-03-08T11:28:48.652Z
Learning: In the holidays project, message IDs (msgids) in locale files use region-specific naming conventions (e.g., "Muharram", "Id-ul-Fitr" in en_IN locale for India), while translator comments use internationally recognized names from the project's default locale (en_US) such as "Ashura", "Eid al-Fitr". This difference is intentional for proper localization.
Learnt from: KJhellico
PR: vacanza/holidays#2530
File: holidays/locale/ca/LC_MESSAGES/AD.po:31-40
Timestamp: 2025-05-06T15:25:44.333Z
Learning: In the Holidays project, msgid fields in localization files contain strings in the entity's default language (as defined by default_language attribute), not English source strings as in standard gettext implementations.
Learnt from: PPsyrius
PR: vacanza/holidays#2676
File: holidays/locale/ar/LC_MESSAGES/EG.po:0-0
Timestamp: 2025-06-25T10:09:29.029Z
Learning: In the holidays library, msgstr fields can be left empty for source/default_language files when using Lingva, the localization tool used by the project.
Learnt from: PPsyrius
PR: vacanza/holidays#2407
File: holidays/locale/en_TL/LC_MESSAGES/TL.po:42-44
Timestamp: 2025-04-03T05:58:00.033Z
Learning: The en_TL (English for Timor-Leste) localization for holidays intentionally uses "World" instead of "International" (e.g., "World Labour Day") to maintain accuracy with official Timor-Leste government sources, even though code comments and other localizations like en_US use "International".
Learnt from: PPsyrius
PR: vacanza/holidays#2407
File: holidays/locale/en_TL/LC_MESSAGES/TL.po:42-44
Timestamp: 2025-04-03T05:58:00.033Z
Learning: The en_TL (English for Timor-Leste) localization for holidays intentionally uses "World" instead of "International" (e.g., "World Labour Day") to maintain accuracy with official Timor-Leste government sources, even though code comments and other localizations like en_US use "International".
tests/countries/test_saint_vincent_and_the_grenadines.py (67)

<retrieved_learning>
Learnt from: KJhellico
PR: #2608
File: tests/countries/test_saint_vincent_and_the_grenadines.py:162-178
Timestamp: 2025-07-02T18:17:53.342Z
Learning: In the Saint Vincent and the Grenadines holidays implementation, New Year's Day is added without observed rules using _add_new_years_day() and should not include observed rule testing in its test method. Only holidays explicitly wrapped with _add_observed() have observed behavior.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2608
File: tests/countries/test_saint_vincent_and_the_grenadines.py:162-178
Timestamp: 2025-07-02T18:21:59.302Z
Learning: In the Saint Vincent and the Grenadines holiday tests, for holidays without observed rules that only require a single assertHolidayName call, pass the holiday name directly as a string literal rather than storing it in a variable first for cleaner, more concise code.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2530
File: tests/countries/test_andorra.py:23-28
Timestamp: 2025-05-06T21:07:11.577Z
Learning: In the holidays project, test methods for country holidays follow a standard form where year ranges are explicitly recreated in each test method rather than being stored as class variables, to maintain consistency across all country tests.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2416
File: tests/countries/test_turkmenistan.py:52-64
Timestamp: 2025-04-05T04:47:27.213Z
Learning: For holiday tests in the vacanza/holidays project, structure tests by individual holidays rather than by years. Each test method should focus on a specific holiday and test it across multiple years (from start_year through 2050) using helper methods like assertHolidayName. For fixed holidays, use generators like (f"{year}-01-01" for year in range(1991, 2051)). For movable holidays, specify individual dates for specific years followed by a range check.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2615
File: tests/countries/test_anguilla.py:1-12
Timestamp: 2025-06-16T15:48:48.680Z
Learning: Test files in the holidays repository follow a standardized structure without module or class docstrings. All country test files use the same pattern: license header, imports, and class definition (class Test{Country}(CommonCountryTests, TestCase):) without docstrings. This is an established codebase convention that should be maintained for consistency.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2416
File: tests/countries/test_turkmenistan.py:85-86
Timestamp: 2025-04-05T04:29:38.042Z
Learning: For testing holiday implementations in the vacanza/holidays repository, recommend using from tests.common import CommonCountryTests as the base class instead of directly using unittest.TestCase to maintain consistency with project conventions and leverage common test utilities.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2386
File: tests/countries/test_nepal.py:499-536
Timestamp: 2025-04-05T06:49:06.217Z
Learning: In the holidays project, test files follow a dual testing approach: individual methods test specific holidays across multiple years, while comprehensive year-specific tests (e.g., test_2025) verify all holidays for a specific year in a single assertion. Both approaches serve different testing purposes and complement each other.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2416
File: tests/countries/test_turkmenistan.py:31-49
Timestamp: 2025-04-05T04:50:40.752Z
Learning: For Turkmenistan holiday tests, use this class structure: class TestTurkmenistan(CommonCountryTests, TestCase) with imports from unittest import TestCase, from holidays.countries import Turkmenistan, TM, TKM, and from tests.common import CommonCountryTests. Ensure to call super().setUp() in the setUp method.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2416
File: tests/countries/test_turkmenistan.py:52-64
Timestamp: 2025-04-05T04:33:53.254Z
Learning: For Turkmenistan holiday tests, recommend using CommonCountryTests as the base class rather than unittest.TestCase to follow project conventions, be consistent with other country test files, and gain access to common test utilities.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2398
File: holidays/countries/guinea.py:106-110
Timestamp: 2025-04-04T10:52:41.546Z
Learning: In the Guinea holidays implementation, observed Eid al-Fitr cases are properly covered by the test_eid_al_fitr_day() method, which tests both the regular holiday dates and the observed dates when the holiday falls on a non-working day (for years >= 2023).
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2678
File: tests/countries/test_puerto_rico.py:84-108
Timestamp: 2025-06-25T10:36:39.103Z
Learning: In the holidays library, test methods (including localization test methods like test_l10n_th, test_l10n_default) follow a standard library-wide approach of not including docstrings. This is the established convention across the codebase.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2678
File: tests/countries/test_american_samoa.py:83-107
Timestamp: 2025-06-25T10:39:18.504Z
Learning: In the holidays library, test methods (especially localization test methods like test_l10n_th, test_l10n_default) do not require docstrings as this is the standard library-wide approach.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2678
File: tests/countries/test_united_states_virgin_islands.py:59-84
Timestamp: 2025-06-25T10:36:39.909Z
Learning: In the holidays library, test methods typically do not have docstrings. Only special test methods that need specific explanation (like edge cases or unique behaviors) have docstrings. Regular test methods like test_l10n_default, test_l10n_th, test_government_holidays, etc. should not have docstrings added.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2524
File: holidays/countries/grenada.py:81-83
Timestamp: 2025-05-03T20:16:58.203Z
Learning: In the Vacanza holidays library, localization (l10n) comments are always written in American English (en_US locale), even when the translatable strings use different regional spellings. For example, comments use "Labor Day" while the corresponding translatable string might use "Labour Day".
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2259
File: holidays/locale/en_IN/LC_MESSAGES/IN.po:30-299
Timestamp: 2025-03-05T17:51:00.633Z
Learning: In the Holidays project, .po files for a country's default locale use empty msgstr fields as a standard convention.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2402
File: holidays/countries/trinidad_and_tobago.py:75-76
Timestamp: 2025-04-05T09:44:39.998Z
Learning: In the holidays library, en_US locale is the standard for localization comments (using American English spelling like "Labor"), while the actual holiday names in code use the appropriate locale-specific spelling (like "Labour" for British English locales such as en_TT).
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2537
File: holidays/countries/finland.py:195-199
Timestamp: 2025-05-09T18:34:33.990Z
Learning: In the holidays library, localization (l10n) is handled through separate .po files for different languages rather than combining multiple translations in a single string. The code should use the default language with tr() function, and translations are provided in language-specific .po files.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2407
File: holidays/locale/en_TL/LC_MESSAGES/TL.po:42-44
Timestamp: 2025-04-03T05:58:00.033Z
Learning: The en_TL (English for Timor-Leste) localization for holidays intentionally uses "World" instead of "International" (e.g., "World Labour Day") to maintain accuracy with official Timor-Leste government sources, even though code comments and other localizations like en_US use "International".
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2407
File: holidays/locale/en_TL/LC_MESSAGES/TL.po:42-44
Timestamp: 2025-04-03T05:58:00.033Z
Learning: The en_TL (English for Timor-Leste) localization for holidays intentionally uses "World" instead of "International" (e.g., "World Labour Day") to maintain accuracy with official Timor-Leste government sources, even though code comments and other localizations like en_US use "International".
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2601
File: tests/countries/test_mongolia.py:128-156
Timestamp: 2025-06-15T11:52:39.572Z
Learning: In the vacanza/holidays project tests, when testing holidays that span multiple consecutive days across many years (like Mongolia's National Festival spanning July 11-13), prefer explicit for loops over complex nested generator expressions with unpacking. The explicit loops are more readable, easier to maintain, and better communicate the testing intent even though the Big O complexity is equivalent.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2398
File: holidays/countries/guinea.py:106-110
Timestamp: 2025-04-04T10:52:41.546Z
Learning: In the Guinea holidays implementation, observed Eid al-Fitr cases are covered by the test_eid_al_fitr_day() method, which tests both regular holiday dates and the observed dates when the holiday falls on a non-working day (for years >= 2023).
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2398
File: tests/countries/test_guinea.py:237-239
Timestamp: 2025-04-02T18:38:35.164Z
Learning: In the vacanza/holidays project, the method assertLocalizedHolidays in country test files should be called with positional parameters rather than named parameters to maintain consistency with the rest of the codebase.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2489
File: holidays/countries/sao_tome_and_principe.py:22-26
Timestamp: 2025-04-23T14:55:35.504Z
Learning: References in holidays classes should only be included if they're used for test case cross-checks or provide historical context about when holidays were added/removed, not just for the sake of having more references.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2489
File: holidays/countries/sao_tome_and_principe.py:22-26
Timestamp: 2025-04-23T14:55:35.504Z
Learning: References in holidays classes should only be included if they're used for test case cross-checks or provide historical context about when holidays were added/removed, not just for the sake of having more references.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2537
File: tests/countries/test_finland.py:23-26
Timestamp: 2025-05-09T18:36:09.607Z
Learning: The holidays project prioritizes complete historical coverage in tests, verifying holidays from their first year of observance (e.g., 1853 for Finland) through future projections, rather than using shorter sliding windows.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2483
File: holidays/countries/turks_and_caicos_islands.py:117-118
Timestamp: 2025-05-13T13:23:11.375Z
Learning: The holidays library uses _add_christmas_day_two method to add Boxing Day holiday, not _add_boxing_day.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2398
File: holidays/countries/guinea.py:73-77
Timestamp: 2025-04-03T12:36:41.201Z
Learning: In the Holidays library, comments explaining year restrictions for holidays should be placed above the year check conditional statement, not inside it. Example format:

# reason why goes here
if start_year <= self._year <= end_year:
    # Holiday name
    self._add_holiday_function(tr("Holiday Name"))

</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2631
File: holidays/countries/sint_maarten.py:94-95
Timestamp: 2025-06-14T20:43:15.370Z
Learning: The _add_* helper methods in the holidays library (such as _add_christmas_day_two(), _add_labor_day(), etc.) don't have default holiday names, so the name parameter should always be explicitly specified when calling these methods.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2629
File: tests/countries/test_namibia.py:22-23
Timestamp: 2025-06-14T10:58:43.636Z
Learning: In the vacanza/holidays project, country test files consistently use range(start_year, 2050) which intentionally excludes 2050 and stops at 2049. This is a library-wide implementation pattern, not an off-by-one error.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2354
File: holidays/countries/fiji.py:146-159
Timestamp: 2025-03-19T16:54:58.657Z
Learning: In the holidays library implementation, explicit holiday dates (like Diwali in Fiji) are only defined for historical years with official sources (2016-2025). Future dates beyond the explicitly defined range are automatically calculated by methods like _add_diwali, which provide approximations when official dates aren't yet available.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2490
File: holidays/countries/ethiopia.py:45-45
Timestamp: 2025-04-23T09:59:19.886Z
Learning: For the Ethiopia holidays class, it's appropriate to add a return type hint only to the _is_leap_year method to match the base class implementation in holidays/holiday_base.py, while keeping other methods without type hints to maintain consistency with other country implementations.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2609
File: holidays/countries/nauru.py:48-50
Timestamp: 2025-06-14T11:05:21.250Z
Learning: In the holidays library, newer implementations use start_year to indicate the earliest year with complete holiday data coverage, not necessarily the first year a holiday existed. If a holiday system starts partway through a year (like Nauru's Public Holidays Act starting Jan 31, 1968), the start_year should be set to the following year (1969) to ensure users get full annual holiday coverage.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2489
File: holidays/countries/sao_tome_and_principe.py:86-88
Timestamp: 2025-04-23T09:22:41.753Z
Learning: For holiday definitions in the holidays package, keep comments simple with just the holiday name (e.g., "# Independence Day.") rather than including dates or historical context, as the function names already encode the date information.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2537
File: holidays/countries/finland.py:249-253
Timestamp: 2025-05-10T04:02:13.815Z
Learning: Holiday name comments directly above tr() function calls in the holidays package should only contain the holiday name itself (e.g., "# Independence Day.") without any additional context, dates, or historical information.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2609
File: holidays/countries/nauru.py:57-60
Timestamp: 2025-06-14T11:04:31.180Z
Learning: In the holidays library, the base HolidayBase._populate() method already includes a guard clause that prevents holiday population methods like _populate_public_holidays() from being called when the year is before start_year or after end_year. Therefore, individual country implementations do not need to add their own guard clauses for years before independence or other start dates.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2642
File: tests/countries/test_wallis_and_futuna.py:19-23
Timestamp: 2025-06-18T17:01:58.067Z
Learning: In the vacanza/holidays repository, the standard pattern for test class setUpClass methods is super().setUpClass(HolidayClass) or super().setUpClass(HolidayClass, years=...) where HolidayClass is passed as the first argument. This is the correct signature that matches the CommonCountryTests.setUpClass method which accepts test_class as the first parameter after cls. Pylint warnings about parameter count mismatch are false positives when comparing against TestCase.setUpClass instead of the immediate parent CommonCountryTests.setUpClass.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2642
File: tests/countries/test_wallis_and_futuna.py:19-23
Timestamp: 2025-06-18T17:01:58.067Z
Learning: In the vacanza/holidays repository, the standard pattern for test class setUpClass methods is super().setUpClass(HolidayClass) where HolidayClass is passed as the first argument. This is the correct signature used across all country test files.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2671
File: tests/countries/test_libya.py:19-24
Timestamp: 2025-06-22T21:36:18.015Z
Learning: In the vacanza/holidays project, test classes for countries do not use docstrings. All test classes follow the same pattern: class declaration directly followed by @classmethod def setUpClass(cls) without any docstrings for the class or methods.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2609
File: tests/countries/test_nauru.py:20-24
Timestamp: 2025-06-13T15:15:25.159Z
Learning: In the vacanza/holidays test suite, overriding setUpClass is intentionally done with the single cls parameter (no *args/**kwargs), so signature-mismatch lint warnings are ignored project-wide.
</retrieved_learning>

<retrieved_learning>
Learnt from: Wasif-Shahzad
PR: #2409
File: holidays/countries/qatar.py:27-46
Timestamp: 2025-04-03T16:58:27.175Z
Learning: In the holidays library, method names like _add_holiday_2nd_tue_of_feb() and _add_holiday_1st_sun_of_mar() use calendar constants internally through parent class implementations even when these constants don't appear directly in the file. Removing imports that seem unused based on a simple text search could break functionality.
</retrieved_learning>

<retrieved_learning>
Learnt from: Wasif-Shahzad
PR: #2409
File: holidays/countries/qatar.py:27-46
Timestamp: 2025-04-03T16:58:27.175Z
Learning: In the holidays library, method names like _add_holiday_2nd_tue_of_feb() and _add_holiday_1st_sun_of_mar() use calendar constants like FEB, TUE, MAR, and SUN internally through parent class implementations even when these constants don't appear directly in the file.
</retrieved_learning>

<retrieved_learning>
Learnt from: ankushhKapoor
PR: #2601
File: holidays/calendars/mongolian.py:1-1
Timestamp: 2025-06-10T12:43:10.577Z
Learning: The holidays project's calendar files (in holidays/calendars/) follow a consistent pattern of NOT having module-level docstrings. They only use class-level docstrings for their main classes. When reviewing calendar files, maintain this consistency and do not suggest adding module docstrings.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2642
File: tests/countries/test_france.py:24-27
Timestamp: 2025-06-18T10:10:46.158Z
Learning: The holidays library prioritizes full test coverage over performance in test suites. Modern library-wide standards favor comprehensive testing across all subdivisions and wide year ranges (e.g., 1803-2050 for France) to ensure thorough validation, even if it creates many test objects.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2642
File: holidays/countries/french_polynesia.py:1-12
Timestamp: 2025-06-19T05:54:49.792Z
Learning: The holidays library uses a standard file header format across all country implementation files consisting of a comprehensive comment block with project description, authors, website, and license information. Country files do not use module-level docstrings but instead rely on this header format followed by class-level docstrings.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2638
File: holidays/countries/svalbard_and_jan_mayen.py:1-12
Timestamp: 2025-06-16T11:42:28.293Z
Learning: In the holidays library codebase, country implementation files in holidays/countries/ follow a standard convention of NOT having module-level docstrings. They start with the license header comment block, followed by imports, then class definitions. This is consistent across all country implementations like austria.py, belgium.py, canada.py, etc.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2642
File: holidays/countries/saint_pierre_and_miquelon.py:39-48
Timestamp: 2025-06-18T15:34:18.326Z
Learning: The holidays library does not use __all__ declarations in country modules. Country files follow a standard pattern without explicit exports, and suggesting __all__ goes against the established library-wide convention.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2362
File: tests/test_ical.py:31-40
Timestamp: 2025-03-23T16:59:25.794Z
Learning: In the holidays library's TestIcalExporter class, initializing ICalExporter with None is intentional. Using a mock object instead breaks tests because the constructor performs attribute validation with getattr(self.holidays, "language", None) which returns a mock with a mock object instead of None, causing validation failures. The approach isolates file operation tests from iCal generation logic.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2407
File: snapshots/countries/TL_COMMON.json:7-7
Timestamp: 2025-04-03T05:59:57.480Z
Learning: In the holidays project, snapshot files (like snapshots/countries/TL_COMMON.json) are auto-generated when running make snapshot and should not be manually edited. Semicolons (;) in holiday entries are used as separators when multiple holidays occur on the same date.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2354
File: holidays/countries/fiji.py:171-183
Timestamp: 2025-03-29T15:15:05.919Z
Learning: In the Fiji holidays implementation, the maintainers are aware of the need to extend the MAWLID_DATES dictionary beyond 2025 when future official references become available, and will do so when appropriate. No suggestions about extending this dictionary should be made in future reviews.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2631
File: tests/countries/test_sint_maarten.py:62-0
Timestamp: 2025-06-14T20:46:32.773Z
Learning: In the vacanza/holidays project tests, inner classes that shadow outer test class names are not standard practice. The test_sint_maarten.py file appears to be the only file using this pattern, making it an outlier rather than following project conventions.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2483
File: holidays/registry.py:177-177
Timestamp: 2025-04-18T21:13:55.589Z
Learning: In the holidays/registry.py file, COUNTRIES dictionary entries should use the class name (without spaces) as the first element of the tuple (e.g., "TurksAndCaicosIslands"), not the human-readable country name with spaces.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2532
File: tests/countries/test_cocos_islands.py:78-89
Timestamp: 2025-05-12T15:31:58.079Z
Learning: In the holidays project, tests for movable holidays (like Easter Monday) should always use static date sets only, not calculation functions.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2678
File: tests/countries/test_guam.py:59-82
Timestamp: 2025-06-25T10:35:02.394Z
Learning: In the holidays library, test methods do not require docstrings as this is the standard library-wide approach used consistently across the codebase.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2631
File: tests/countries/test_sint_maarten.py:62-0
Timestamp: 2025-06-14T21:12:07.224Z
Learning: KJhellico prefers to focus on completing and reviewing the main holiday implementation code before doing detailed reviews of the corresponding test files.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2614
File: README.md:108-108
Timestamp: 2025-06-14T20:13:29.536Z
Learning: In the vacanza/holidays repository, the team prefers to manually update the country count in README.md when adding new countries, with tests in place to verify the count stays accurate. They are satisfied with this approach and do not want it automated.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2537
File: holidays/countries/finland.py:0-0
Timestamp: 2025-05-10T04:32:15.760Z
Learning: In the holidays package, detailed historical context and additional information should be added as comments at the method level or above conditional blocks, while comments directly above tr() function calls should only contain the holiday name itself (e.g., "# Independence Day.").
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2489
File: holidays/countries/sao_tome_and_principe.py:1-12
Timestamp: 2025-04-24T04:59:38.436Z
Learning: The holidays library uses a standard file header across country implementation files that includes copyright information, authors, website, and license details. New country implementation files should follow this same header format.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2489
File: holidays/countries/sao_tome_and_principe.py:1-12
Timestamp: 2025-04-24T04:59:38.436Z
Learning: The holidays library uses a standard file header across country implementation files that includes copyright information, authors, website, and license details. New country implementation files should follow this same header format.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2354
File: holidays/countries/fiji.py:185-188
Timestamp: 2025-03-19T16:53:00.375Z
Learning: In the Fiji holidays implementation, the special_public_holidays_observed dictionary in FijiStaticHolidays is only used for exceptions to the normal observance rules, not for documenting all holidays. Only 2019's Constitution Day needed a special entry as it didn't follow the standard patterns.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2642
File: holidays/countries/france.py:300-319
Timestamp: 2025-06-18T10:21:01.376Z
Learning: In the France holidays implementation, legislative years for holiday changes should be hard-coded rather than extracted into constants, as this maintains consistency with the existing codebase pattern and provides historical accuracy for specific legislative acts.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2354
File: holidays/countries/fiji.py:63-70
Timestamp: 2025-03-23T10:11:50.465Z
Learning: In the holidays library, the SAT_SUN_TO_NEXT_MON_TUE rule is specifically used for consecutive holidays (like Christmas Day and Boxing Day) to ensure they're observed on separate weekdays (Monday and Tuesday) when they fall on weekends, while SAT_SUN_TO_NEXT_MON is used as the default rule for other holidays.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2684
File: holidays/locale/it/LC_MESSAGES/SM.po:13-13
Timestamp: 2025-06-28T10:39:19.185Z
Learning: In the holidays project, .po file header comments use the format "# [Country] holidays." for default language files (without trailing hash) and "# [Country] holidays [locale] localization." for non-default language files (also without trailing hash).
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2629
File: holidays/countries/namibia.py:70-73
Timestamp: 2025-06-14T11:04:24.104Z
Learning: In Namibia's holiday system, Genocide Remembrance Day (May 28, starting 2025) is implemented as a fixed commemorative date without observed day handling (_add_observed), indicating it should be observed on May 28th regardless of the day of the week, similar to other commemorative holidays like Good Friday and Christmas Day.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2402
File: holidays/countries/trinidad_and_tobago.py:85-92
Timestamp: 2025-04-25T20:27:59.086Z
Learning: The _populate_observed method in holiday classes should maintain the same signature as the parent class ObservedHolidayBase, even if specific child class implementations don't use all parameters.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2386
File: tests/countries/test_nepal.py:551-554
Timestamp: 2025-05-01T19:19:42.346Z
Learning: In the holidays library, multiple holidays on the same date are sorted alphabetically internally, so the order in which holidays are added does not affect the resulting holiday name string when multiple holidays occur on the same date.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2386
File: tests/countries/test_nepal.py:551-554
Timestamp: 2025-05-01T19:19:42.346Z
Learning: In the holidays library, when multiple holidays fall on the same date, their names are always sorted alphabetically (in setitem of HolidayBase), so the order of addition does not affect the resulting string.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2593
File: holidays/countries/senegal.py:66-110
Timestamp: 2025-06-06T14:40:31.932Z
Learning: In the holidays library, within the _populate_public_holidays method, holidays should be arranged by calendar type (Islamic holidays first, then Gregorian holidays) without additional type grouping comments. The organization by calendar type is sufficient and follows the project's established conventions.
</retrieved_learning>

holidays/countries/saint_vincent_and_the_grenadines.py (151)

<retrieved_learning>
Learnt from: KJhellico
PR: #2608
File: tests/countries/test_saint_vincent_and_the_grenadines.py:162-178
Timestamp: 2025-07-02T18:17:53.342Z
Learning: In the Saint Vincent and the Grenadines holidays implementation, New Year's Day is added without observed rules using _add_new_years_day() and should not include observed rule testing in its test method. Only holidays explicitly wrapped with _add_observed() have observed behavior.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2608
File: tests/countries/test_saint_vincent_and_the_grenadines.py:162-178
Timestamp: 2025-07-02T18:21:59.302Z
Learning: In the Saint Vincent and the Grenadines holiday tests, for holidays without observed rules that only require a single assertHolidayName call, pass the holiday name directly as a string literal rather than storing it in a variable first for cleaner, more concise code.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2643
File: holidays/countries/mauritius.py:144-169
Timestamp: 2025-06-19T02:34:18.382Z
Learning: Custom holiday classes that extend _CustomHinduHolidays, _CustomIslamicHolidays, _CustomBuddhistHolidays, etc. in the holidays library do not use docstrings. They follow a pattern of using only inline comments above date dictionaries, as seen in Malaysia, Singapore, UAE, and other country implementations.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2614
File: holidays/countries/guyana.py:78-90
Timestamp: 2025-06-13T12:18:03.539Z
Learning: The holidays codebase now uses the constructor signature pattern __init__(self, *args, islamic_show_estimated: bool = True, **kwargs) across country classes.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2632
File: holidays/countries/solomon_islands.py:95-98
Timestamp: 2025-06-16T12:28:31.641Z
Learning: Library-wide holiday patterns and their optimizations should be handled at the base class level (like InternationalHolidays) rather than documenting workarounds in individual country modules. This maintains separation of concerns and avoids documentation duplication.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2354
File: holidays/countries/fiji.py:185-188
Timestamp: 2025-03-19T16:53:00.375Z
Learning: In the Fiji holidays implementation, the special_public_holidays_observed dictionary in FijiStaticHolidays is only used for exceptions to the normal observance rules, not for documenting all holidays. Only 2019's Constitution Day needed a special entry as it didn't follow the standard patterns.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2608
File: holidays/countries/saint_vincent_and_the_grenadines.py:39-44
Timestamp: 2025-06-07T11:19:38.945Z
Learning: In the holidays library, it's standard practice to explicitly call ChristianHolidays.init(self) and InternationalHolidays.init(self) in country class init methods, even when these mixins don't define their own init methods. This follows the established codebase convention across all country implementations (confirmed in Zimbabwe, Zambia, and other countries).
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2638
File: holidays/countries/svalbard_and_jan_mayen.py:1-12
Timestamp: 2025-06-16T11:42:28.293Z
Learning: In the holidays library codebase, country implementation files in holidays/countries/ follow a standard convention of NOT having module-level docstrings. They start with the license header comment block, followed by imports, then class definitions. This is consistent across all country implementations like austria.py, belgium.py, canada.py, etc.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2386
File: holidays/countries/nepal.py:24-26
Timestamp: 2025-03-30T20:18:46.006Z
Learning: In the holidays library, country classes do not directly implement _populate(). Instead, they implement specialized methods like _populate_public_holidays(), and the base class HolidayBase handles the orchestration by calling these specialized methods.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2402
File: holidays/countries/trinidad_and_tobago.py:85-92
Timestamp: 2025-04-25T20:27:59.086Z
Learning: The _populate_observed method in holiday classes should maintain the same signature as the parent class ObservedHolidayBase, even if specific child class implementations don't use all parameters.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2354
File: holidays/countries/fiji.py:63-70
Timestamp: 2025-03-23T10:11:50.465Z
Learning: In the holidays library, the SAT_SUN_TO_NEXT_MON_TUE rule is specifically used for consecutive holidays (like Christmas Day and Boxing Day) to ensure they're observed on separate weekdays (Monday and Tuesday) when they fall on weekends, while SAT_SUN_TO_NEXT_MON is used as the default rule for other holidays.
</retrieved_learning>

<retrieved_learning>
Learnt from: Wasif-Shahzad
PR: #2409
File: holidays/countries/qatar.py:27-46
Timestamp: 2025-04-03T16:58:27.175Z
Learning: In the holidays library, method names like _add_holiday_2nd_tue_of_feb() and _add_holiday_1st_sun_of_mar() use calendar constants internally through parent class implementations even when these constants don't appear directly in the file. Removing imports that seem unused based on a simple text search could break functionality.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2631
File: holidays/countries/sint_maarten.py:94-95
Timestamp: 2025-06-14T20:43:15.370Z
Learning: The _add_* helper methods in the holidays library (such as _add_christmas_day_two(), _add_labor_day(), etc.) don't have default holiday names, so the name parameter should always be explicitly specified when calling these methods.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2398
File: tests/countries/test_guinea.py:237-239
Timestamp: 2025-04-02T18:38:35.164Z
Learning: In the vacanza/holidays project, the method assertLocalizedHolidays in country test files should be called with positional parameters rather than named parameters to maintain consistency with the rest of the codebase.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2398
File: holidays/countries/guinea.py:73-77
Timestamp: 2025-04-03T12:36:41.201Z
Learning: In the Holidays library, comments explaining year restrictions for holidays should be placed above the year check conditional statement, not inside it. Example format:

# reason why goes here
if start_year <= self._year <= end_year:
    # Holiday name
    self._add_holiday_function(tr("Holiday Name"))

</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2671
File: holidays/countries/libya.py:25-25
Timestamp: 2025-06-22T21:34:15.792Z
Learning: In the holidays project, very long URLs in References sections are handled by putting the description on one line followed by the URL on an indented line below it, rather than using markdown link format for extremely long archive URLs.
</retrieved_learning>

<retrieved_learning>
Learnt from: kritibirda26
PR: #2395
File: holidays/countries/antigua_and_barbuda.py:68-75
Timestamp: 2025-03-31T14:19:13.901Z
Learning: For Antigua and Barbuda holidays, Carnival Tuesday should only be considered a holiday for years after 2005 (not including 2005 itself) because the 2005 amendment was passed on September 15th, which is after the August Carnival celebrations that year.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2489
File: holidays/countries/sao_tome_and_principe.py:22-26
Timestamp: 2025-04-23T14:55:35.504Z
Learning: References in holidays classes should only be included if they're used for test case cross-checks or provide historical context about when holidays were added/removed, not just for the sake of having more references.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2489
File: holidays/countries/sao_tome_and_principe.py:22-26
Timestamp: 2025-04-23T14:55:35.504Z
Learning: References in holidays classes should only be included if they're used for test case cross-checks or provide historical context about when holidays were added/removed, not just for the sake of having more references.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2623
File: holidays/countries/christmas_island.py:45-63
Timestamp: 2025-06-24T19:54:34.590Z
Learning: In the holidays library codebase, full reference URLs should be kept intact in documentation even if they exceed line length limits. The project prioritizes URL traceability over strict line length adherence in reference sections.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2671
File: holidays/countries/libya.py:25-25
Timestamp: 2025-06-22T21:34:15.792Z
Learning: In the holidays project, Reference URLs in docstrings are kept as complete markdown links on single lines even when they exceed 100 characters, prioritizing reference readability over line length limits.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2354
File: holidays/countries/fiji.py:146-159
Timestamp: 2025-03-19T16:54:58.657Z
Learning: In the holidays library implementation, explicit holiday dates (like Diwali in Fiji) are only defined for historical years with official sources (2016-2025). Future dates beyond the explicitly defined range are automatically calculated by methods like _add_diwali, which provide approximations when official dates aren't yet available.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2490
File: holidays/countries/ethiopia.py:45-45
Timestamp: 2025-04-23T09:59:19.886Z
Learning: For the Ethiopia holidays class, it's appropriate to add a return type hint only to the _is_leap_year method to match the base class implementation in holidays/holiday_base.py, while keeping other methods without type hints to maintain consistency with other country implementations.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2606
File: holidays/countries/faroe_islands.py:62-67
Timestamp: 2025-06-15T15:24:53.055Z
Learning: The HolidayBase class uses __getattr__ to dynamically implement _add_holiday_* methods through pattern matching, including patterns like _add_holiday_<n>_days_past_easter, _add_holiday_<month>_<day>, and various weekday-relative patterns. Methods like _add_holiday_26_days_past_easter are not explicitly defined but are dynamically generated when called.
</retrieved_learning>

<retrieved_learning>
Learnt from: Wasif-Shahzad
PR: #2409
File: holidays/countries/qatar.py:27-46
Timestamp: 2025-04-03T16:58:27.175Z
Learning: In the holidays library, method names like _add_holiday_2nd_tue_of_feb() and _add_holiday_1st_sun_of_mar() use calendar constants like FEB, TUE, MAR, and SUN internally through parent class implementations even when these constants don't appear directly in the file.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2537
File: holidays/countries/finland.py:0-0
Timestamp: 2025-05-10T04:32:15.760Z
Learning: In the holidays package, detailed historical context and additional information should be added as comments at the method level or above conditional blocks, while comments directly above tr() function calls should only contain the holiday name itself (e.g., "# Independence Day.").
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2483
File: holidays/countries/turks_and_caicos_islands.py:117-118
Timestamp: 2025-05-13T13:23:11.375Z
Learning: The holidays library uses _add_christmas_day_two method to add Boxing Day holiday, not _add_boxing_day.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2354
File: holidays/countries/fiji.py:171-183
Timestamp: 2025-03-29T15:15:05.919Z
Learning: In the Fiji holidays implementation, the maintainers are aware of the need to extend the MAWLID_DATES dictionary beyond 2025 when future official references become available, and will do so when appropriate. No suggestions about extending this dictionary should be made in future reviews.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2609
File: holidays/countries/nauru.py:57-60
Timestamp: 2025-06-14T11:04:31.180Z
Learning: In the holidays library, the base HolidayBase._populate() method already includes a guard clause that prevents holiday population methods like _populate_public_holidays() from being called when the year is before start_year or after end_year. Therefore, individual country implementations do not need to add their own guard clauses for years before independence or other start dates.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2537
File: holidays/countries/finland.py:249-253
Timestamp: 2025-05-10T04:02:13.815Z
Learning: Holiday name comments directly above tr() function calls in the holidays package should only contain the holiday name itself (e.g., "# Independence Day.") without any additional context, dates, or historical information.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2635
File: holidays/countries/bhutan.py:13-16
Timestamp: 2025-06-16T14:08:09.492Z
Learning: In the holidays library, translation is performed in the _add_holiday methods, not at the string level. Holiday strings passed to _add_holiday_* methods are processed through the translation machinery within those methods, so using tr() or self.tr() wrappers is unnecessary.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2489
File: holidays/countries/sao_tome_and_principe.py:86-88
Timestamp: 2025-04-23T09:22:41.753Z
Learning: For holiday definitions in the holidays package, keep comments simple with just the holiday name (e.g., "# Independence Day.") rather than including dates or historical context, as the function names already encode the date information.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2601
File: holidays/countries/mongolia.py:25-30
Timestamp: 2025-06-24T18:25:25.165Z
Learning: In the holidays project, reference URLs in docstrings/comments that exceed 100 characters are acceptable if they pass the pre-commit tests, even if Pylint flags them as line length violations.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2637
File: holidays/countries/singapore.py:49-50
Timestamp: 2025-06-16T11:17:34.671Z
Learning: For the vacanza/holidays project, defer to ruff's line length rules rather than pylint's C0301 warnings. If ruff passes in pre-commit tests, line length is acceptable regardless of pylint warnings about exceeding 100 characters.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2632
File: holidays/countries/solomon_islands.py:28-54
Timestamp: 2025-06-15T15:10:20.360Z
Learning: In the vacanza/holidays project, ruff configuration allows longer docstring lines than the typical 100-character limit, so docstring reference lines that exceed standard line length limits are acceptable and won't be flagged by ruff format during pre-commit checks.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2615
File: tests/countries/test_anguilla.py:20-24
Timestamp: 2025-06-16T15:48:33.931Z
Learning: The holidays project uses make pre-commit test which includes ruff as the primary linter. If ruff passes, then Pylint warnings that don't appear in ruff are considered acceptable and can be ignored.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2600
File: holidays/countries/philippines.py:56-56
Timestamp: 2025-06-05T18:24:26.712Z
Learning: In the holidays repository, if code passes make pre-commit checks, then it's allowed regardless of individual static analysis tool warnings like Pylint line length violations. The pre-commit hooks are the definitive source of truth for their coding standards.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2632
File: holidays/countries/solomon_islands.py:28-54
Timestamp: 2025-06-15T15:10:20.360Z
Learning: The vacanza/holidays project uses ruff with line-length = 99 characters (configured in pyproject.toml), not the standard 80 or 100 character limits. When pre-commit checks pass, the formatting is compliant with the project's specific ruff configuration.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2608
File: holidays/countries/saint_vincent_and_the_grenadines.py:30-30
Timestamp: 2025-06-07T07:37:55.516Z
Learning: For the vacanza/holidays repository, defer to the ruff configuration and pre-commit checks for coding standards rather than making manual suggestions about line length or style issues. If the automated checks pass, the code follows the project's standards.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2606
File: holidays/countries/faroe_islands.py:0-0
Timestamp: 2025-06-06T13:23:16.229Z
Learning: Never suggest breaking long URLs in code comments or documentation. If something passes the pre-commit check, then it's allowed and should not be flagged for line length violations.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2398
File: holidays/groups/islamic.py:301-301
Timestamp: 2025-04-01T14:14:01.519Z
Learning: Running make pre-commit in the holidays project can automatically fix common code style issues like whitespace in blank lines.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2702
File: holidays/countries/init.py:65-69
Timestamp: 2025-07-05T20:26:31.193Z
Learning: The vacanza/holidays project uses ruff as the primary linter for code checking and linting. Flake8 suppression comments are not needed since the project defers to ruff's rules, and existing ruff: noqa comments should be sufficient for handling linting warnings.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2594
File: holidays/countries/micronesia.py:25-30
Timestamp: 2025-06-04T11:06:21.179Z
Learning: In the holidays repository, line length formatting should defer to pre-commit formatting checks rather than manual suggestions. If pre-commit allows it, the formatting is acceptable per project policy.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2608
File: holidays/countries/saint_vincent_and_the_grenadines.py:30-30
Timestamp: 2025-06-07T07:37:55.516Z
Learning: For the vacanza/holidays repository, coding standards and line length limits should follow what is allowed by the ruff linter configuration used in the pre-commit checks, not arbitrary 100-character limits.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2614
File: README.md:108-108
Timestamp: 2025-06-14T20:13:29.536Z
Learning: In the vacanza/holidays repository, the team prefers to manually update the country count in README.md when adding new countries, with tests in place to verify the count stays accurate. They are satisfied with this approach and do not want it automated.
</retrieved_learning>

<retrieved_learning>
Learnt from: Wasif-Shahzad
PR: #2593
File: holidays/countries/senegal.py:104-110
Timestamp: 2025-06-05T17:22:43.114Z
Learning: In the holidays library codebase, country alias classes (like SN, SEN for Senegal) follow a consistent convention of having no docstrings and just containing "pass". This pattern is used across all countries - examples include BR/BRA for Brazil, CA/CAN for Canada, DE/DEU for Germany, etc. Static analysis tools may flag missing docstrings, but the established codebase convention is to keep these alias classes minimal.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2609
File: holidays/countries/nauru.py:149-154
Timestamp: 2025-06-09T19:50:56.039Z
Learning: In the holidays library project, never suggest adding docstrings for alias classes (like NR, NRU country code aliases that inherit from main country classes). The project deliberately omits docstrings for these simple alias classes.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2651
File: holidays/countries/bonaire_sint_eustatius_and_saba.py:121-126
Timestamp: 2025-06-24T19:41:46.854Z
Learning: In the holidays library, simple alias classes that inherit from parent classes with just pass statements do not include docstrings. This is a consistent pattern throughout the codebase and should be maintained for consistency.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2402
File: holidays/countries/trinidad_and_tobago.py:28-33
Timestamp: 2025-04-02T04:51:17.842Z
Learning: The library convention for country code aliases (like two-letter ISO 3166-1 alpha-2 and three-letter ISO 3166-1 alpha-3 codes) is to implement them as simple pass-through classes without docstrings.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2402
File: holidays/countries/trinidad_and_tobago.py:28-33
Timestamp: 2025-04-02T04:51:17.842Z
Learning: The library convention for country code aliases (like two-letter ISO 3166-1 alpha-2 and three-letter ISO 3166-1 alpha-3 codes) is to implement them as simple pass-through classes without docstrings.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2615
File: tests/countries/test_anguilla.py:1-12
Timestamp: 2025-06-16T15:48:48.680Z
Learning: Test files in the holidays repository follow a standardized structure without module or class docstrings. All country test files use the same pattern: license header, imports, and class definition (class Test{Country}(CommonCountryTests, TestCase):) without docstrings. This is an established codebase convention that should be maintained for consistency.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2671
File: tests/countries/test_libya.py:19-24
Timestamp: 2025-06-22T21:36:18.015Z
Learning: In the vacanza/holidays project, test classes for countries do not use docstrings. All test classes follow the same pattern: class declaration directly followed by @classmethod def setUpClass(cls) without any docstrings for the class or methods.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2483
File: holidays/registry.py:177-177
Timestamp: 2025-04-18T21:13:55.589Z
Learning: In the holidays/registry.py file, COUNTRIES dictionary entries should use the class name (without spaces) as the first element of the tuple (e.g., "TurksAndCaicosIslands"), not the human-readable country name with spaces.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2671
File: holidays/countries/libya.py:1-1
Timestamp: 2025-06-22T21:33:17.854Z
Learning: In the holidays library, country files do not use module docstrings. The established pattern is: license header comment block, imports, then class definitions with class docstrings. Module docstrings should not be added to country files as they don't follow this convention.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2608
File: holidays/countries/saint_vincent_and_the_grenadines.py:39-44
Timestamp: 2025-06-07T11:19:38.945Z
Learning: In the holidays library, it's standard practice to explicitly call ChristianHolidays.init(self) and InternationalHolidays.init(self) in country class init methods, even when these mixins don't define their own init methods. This follows the established codebase convention across all country implementations.
</retrieved_learning>

<retrieved_learning>
Learnt from: ankushhKapoor
PR: #2386
File: holidays/countries/nepal.py:29-34
Timestamp: 2025-03-29T17:55:09.799Z
Learning: In the holidays library, classes with multiple inheritance from various holiday groups (like ChristianHolidays, HinduCalendarHolidays, etc.) should initialize each parent class separately rather than using super().__init__(*args, **kwargs) because the parent classes have different parameter requirements. HolidayBase should receive the *args, **kwargs while other holiday group classes typically don't accept parameters like observed.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2386
File: holidays/countries/nepal.py:52-60
Timestamp: 2025-04-13T20:42:13.152Z
Learning: In the holidays library, country classes follow a consistent initialization pattern: first explicitly initializing each parent holiday group class with their specific parameters, then calling super().__init__(*args, **kwargs) at the end to properly initialize the base HolidayBase class.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2642
File: tests/countries/test_wallis_and_futuna.py:19-23
Timestamp: 2025-06-18T17:01:58.067Z
Learning: In the vacanza/holidays repository, the standard pattern for test class setUpClass methods is super().setUpClass(HolidayClass) or super().setUpClass(HolidayClass, years=...) where HolidayClass is passed as the first argument. This is the correct signature that matches the CommonCountryTests.setUpClass method which accepts test_class as the first parameter after cls. Pylint warnings about parameter count mismatch are false positives when comparing against TestCase.setUpClass instead of the immediate parent CommonCountryTests.setUpClass.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2629
File: holidays/countries/namibia.py:70-73
Timestamp: 2025-06-14T11:04:24.104Z
Learning: In Namibia's holiday system, Genocide Remembrance Day (May 28, starting 2025) is implemented as a fixed commemorative date without observed day handling (_add_observed), indicating it should be observed on May 28th regardless of the day of the week, similar to other commemorative holidays like Good Friday and Christmas Day.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2398
File: holidays/countries/guinea.py:106-110
Timestamp: 2025-04-04T10:52:41.546Z
Learning: In the Guinea holidays implementation, observed Eid al-Fitr cases are properly covered by the test_eid_al_fitr_day() method, which tests both the regular holiday dates and the observed dates when the holiday falls on a non-working day (for years >= 2023).
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2416
File: tests/countries/test_turkmenistan.py:52-64
Timestamp: 2025-04-05T04:47:27.213Z
Learning: For holiday tests in the vacanza/holidays project, structure tests by individual holidays rather than by years. Each test method should focus on a specific holiday and test it across multiple years (from start_year through 2050) using helper methods like assertHolidayName. For fixed holidays, use generators like (f"{year}-01-01" for year in range(1991, 2051)). For movable holidays, specify individual dates for specific years followed by a range check.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2398
File: holidays/countries/guinea.py:106-110
Timestamp: 2025-04-04T10:52:41.546Z
Learning: In the Guinea holidays implementation, observed Eid al-Fitr cases are covered by the test_eid_al_fitr_day() method, which tests both regular holiday dates and the observed dates when the holiday falls on a non-working day (for years >= 2023).
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2571
File: holidays/countries/bermuda.py:108-110
Timestamp: 2025-05-31T15:11:42.151Z
Learning: In the holidays library project, alias classes (like BM, BMU) do not have docstrings. This is a project-specific convention.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2608
File: holidays/countries/saint_vincent_and_the_grenadines.py:1-12
Timestamp: 2025-06-08T13:36:16.999Z
Learning: For the holidays project/repository, module docstrings are not used and should never be suggested, even when pylint flags missing module docstring warnings (C0114).
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2583
File: holidays/countries/niger.py:1-1
Timestamp: 2025-06-01T17:58:53.279Z
Learning: In the holidays project, module-level docstrings are not required or needed for country holiday files in the holidays/countries/ directory.
</retrieved_learning>

<retrieved_learning>
Learnt from: ankushhKapoor
PR: #2601
File: holidays/calendars/mongolian.py:1-1
Timestamp: 2025-06-10T12:43:10.577Z
Learning: The holidays project's calendar files (in holidays/calendars/) follow a consistent pattern of NOT having module-level docstrings. They only use class-level docstrings for their main classes. When reviewing calendar files, maintain this consistency and do not suggest adding module docstrings.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2642
File: tests/countries/test_wallis_and_futuna.py:19-23
Timestamp: 2025-06-18T17:01:58.067Z
Learning: In the vacanza/holidays repository, the standard pattern for test class setUpClass methods is super().setUpClass(HolidayClass) where HolidayClass is passed as the first argument. This is the correct signature used across all country test files.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2654
File: holidays/countries/cape_verde.py:1-12
Timestamp: 2025-06-21T16:30:12.749Z
Learning: The holidays project does not use module docstrings in country holiday files. All country files start directly with the copyright header comment block without module docstrings, maintaining a consistent coding style across the project.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2642
File: holidays/countries/french_polynesia.py:1-12
Timestamp: 2025-06-19T05:54:49.792Z
Learning: The holidays library uses a standard file header format across all country implementation files consisting of a comprehensive comment block with project description, authors, website, and license information. Country files do not use module-level docstrings but instead rely on this header format followed by class-level docstrings.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2678
File: tests/countries/test_northern_mariana_islands.py:51-51
Timestamp: 2025-06-25T10:36:00.237Z
Learning: In the holidays library, test methods intentionally do not include docstrings as part of the standard library-wide coding approach.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2678
File: tests/countries/test_american_samoa.py:58-81
Timestamp: 2025-06-25T10:36:20.110Z
Learning: In the holidays library codebase, test methods typically do not include docstrings - this is the standard library-wide approach and should not be flagged as missing documentation.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2678
File: tests/countries/test_united_states_minor_outlying_islands.py:75-94
Timestamp: 2025-06-25T10:39:25.676Z
Learning: In the holidays library, test methods do not include docstrings. This is the standard library-wide approach used consistently across all test files.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2678
File: tests/countries/test_united_states_virgin_islands.py:86-112
Timestamp: 2025-06-25T10:35:32.591Z
Learning: In the holidays library, test methods do not include docstrings as this is the standard library-wide approach and coding convention.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2642
File: holidays/countries/saint_pierre_and_miquelon.py:39-48
Timestamp: 2025-06-18T15:34:18.326Z
Learning: The holidays library does not use __all__ declarations in country modules. Country files follow a standard pattern without explicit exports, and suggesting __all__ goes against the established library-wide convention.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2593
File: holidays/countries/senegal.py:66-110
Timestamp: 2025-06-06T14:40:31.932Z
Learning: In the holidays library, within the _populate_public_holidays method, holidays should be arranged by calendar type (Islamic holidays first, then Gregorian holidays) without additional type grouping comments. The organization by calendar type is sufficient and follows the project's established conventions.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2323
File: holidays/countries/macau.py:407-461
Timestamp: 2025-03-04T11:32:45.095Z
Learning: In the holidays library, the standard approach for organizing static holidays is to use separate dictionaries for different categories (like special_government_holidays, special_mandatory_holidays, and special_public_holidays), which are utilized by syntactic sugar methods to pick up the appropriate holidays based on the selected category.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2323
File: holidays/countries/macau.py:407-461
Timestamp: 2025-03-04T11:32:45.095Z
Learning: In the holidays library, the standard approach for organizing static holidays is to use separate dictionaries for different categories (like special_government_holidays, special_mandatory_holidays, and special_public_holidays), which are utilized by syntactic sugar methods to pick up the appropriate holidays based on the selected category.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2323
File: holidays/countries/macau.py:407-461
Timestamp: 2025-03-04T11:32:45.095Z
Learning: In the holidays library, the standard approach for organizing static holidays is to use separate dictionaries for different categories (government, mandatory, and public), which are utilized by syntactic sugar methods.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2671
File: holidays/countries/libya.py:51-108
Timestamp: 2025-06-29T10:36:06.138Z
Learning: There is no project-wide convention in the holidays library to organize holidays by calendar type (Islamic holidays first, then Gregorian holidays). Countries organize holidays in various ways - often chronologically, by importance, or by logical grouping - and Islamic holidays are frequently placed at the end of the _populate_public_holidays method rather than at the beginning.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2532
File: tests/countries/test_cocos_islands.py:78-89
Timestamp: 2025-05-12T15:31:58.079Z
Learning: In the holidays project, tests for movable holidays (like Easter Monday) should always use static date sets only, not calculation functions.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2632
File: holidays/countries/solomon_islands.py:90-97
Timestamp: 2025-06-15T20:39:51.085Z
Learning: Solomon Islands Saturday → Friday holiday shift rule was systematically implemented only from around 2021-2022 onward, not consistently applied since 1979. The Public Holidays Act only explicitly mentions Sunday → Monday shifts, with Saturday shifts handled through discretionary ministerial gazette notices.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2614
File: holidays/countries/guyana.py:124-130
Timestamp: 2025-06-14T18:58:55.499Z
Learning: In Guyana's holidays implementation (holidays/countries/guyana.py), Emancipation Day should be implemented as a fixed-date holiday on August 1st with weekend observance rules, not as the first Monday of August. This is confirmed by official Guyana Ministry of Home Affairs sources.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2651
File: holidays/countries/bonaire_sint_eustatius_and_saba.py:89-91
Timestamp: 2025-06-29T07:05:53.480Z
Learning: Rincon Day (April 30) on Bonaire was only officially recognized as a public holiday from 2020 onwards, even though it may have been observed informally or locally before that date. For the holidays library, official recognition is what determines inclusion dates.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2629
File: holidays/countries/namibia.py:70-73
Timestamp: 2025-06-14T11:04:24.104Z
Learning: In Namibia's holiday system, holidays declared by presidential proclamation under Section 1(3) of the Public Holidays Act may not automatically be subject to the Sunday-to-Monday observation rule in Section 1(2), which primarily applies to holidays listed in the Schedule. Genocide Remembrance Day (May 28) starting in 2025 is treated as a fixed commemorative date without observed day handling.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2615
File: tests/countries/test_anguilla.py:52-64
Timestamp: 2025-06-15T10:15:39.883Z
Learning: In the Anguilla holidays implementation, March 2 only has "James Ronald Webster Day" (from 2010 onwards). There is no "Sovereignty Day" holiday on this date. Queen's/King's Birthday holidays are in June, not March.
</retrieved_learning>

<retrieved_learning>
Learnt from: kritibirda26
PR: #2395
File: holidays/countries/antigua_and_barbuda.py:119-123
Timestamp: 2025-03-31T14:17:47.462Z
Learning: Antigua and Barbuda has had only two general elections (2018 and 2023) since the 2014 amendment that made the day after a general election a holiday.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2402
File: holidays/countries/trinidad_and_tobago.py:25-25
Timestamp: 2025-04-02T04:54:07.204Z
Learning: For English-speaking countries in the holidays library (like Trinidad and Tobago), the default_language and supported_languages parameters are optional. If languages are added for such countries, ensure that en_US is included in the list alongside the regional code variant (e.g., en_TT for Trinidad and Tobago).
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2629
File: holidays/locale/en_US/LC_MESSAGES/NA.po:17-28
Timestamp: 2025-06-14T11:00:25.835Z
Learning: In the holidays library localization files, the X-Source-Language field should contain the value that matches the country's default language setting (e.g., if a country class has default_language = "en_NA", then X-Source-Language should be "en_NA").
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2642
File: holidays/locale/fr/LC_MESSAGES/MF.po:17-28
Timestamp: 2025-06-18T17:23:16.739Z
Learning: In the holidays library, for French holidays localization files, the default_language is 'fr' (French), so X-Source-Language should be set to 'fr', not 'en'. The source language for holidays matches the country's primary language.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2362
File: holidays/ical.py:27-52
Timestamp: 2025-03-27T04:46:17.044Z
Learning: In the ICalExporter class, the language tag (;LANGUAGE=) should only be included in the SUMMARY field when explicitly requested (show_language=True) and a valid language is available. The default behavior (show_language=False) doesn't include the language tag.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2362
File: tests/test_ical.py:54-75
Timestamp: 2025-03-22T09:31:16.025Z
Learning: The ICalExporter class in holidays/ical.py already handles empty language strings, likely treating them similar to None values which default to "EN".
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2684
File: holidays/locale/it/LC_MESSAGES/SM.po:13-13
Timestamp: 2025-06-28T10:39:19.185Z
Learning: In the holidays project, .po file header comments use the format "# [Country] holidays." for default language files (without trailing hash) and "# [Country] holidays [locale] localization." for non-default language files (also without trailing hash).
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2530
File: holidays/locale/ca/LC_MESSAGES/AD.po:31-40
Timestamp: 2025-05-06T15:25:44.333Z
Learning: In the Holidays project, msgid fields in localization files contain strings in the entity's default language (as defined by default_language attribute), not English source strings as in standard gettext implementations.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2678
File: holidays/locale/th/LC_MESSAGES/US.po:30-34
Timestamp: 2025-06-26T13:20:10.172Z
Learning: In the holidays library Thai localizations, the "observed" format consistently uses "ชดเชย%s" without spaces between the Thai word and placeholder across all .po files in the codebase.
</retrieved_learning>

<retrieved_learning>
Learnt from: Wasif-Shahzad
PR: #2385
File: holidays/countries/pakistan.py:59-60
Timestamp: 2025-03-31T11:50:50.488Z
Learning: In the holidays library, function names and comments follow en_US spelling conventions (e.g., "Labor Day"), while the default strings may use different locale conventions (e.g., "Labour Day" for en_PK) and are translated appropriately using the gettext function.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2407
File: holidays/locale/en_TL/LC_MESSAGES/TL.po:42-44
Timestamp: 2025-04-03T05:58:00.033Z
Learning: The en_TL (English for Timor-Leste) localization for holidays intentionally uses "World" instead of "International" (e.g., "World Labour Day") to maintain accuracy with official Timor-Leste government sources, even though code comments and other localizations like en_US use "International".
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2407
File: holidays/locale/en_TL/LC_MESSAGES/TL.po:42-44
Timestamp: 2025-04-03T05:58:00.033Z
Learning: The en_TL (English for Timor-Leste) localization for holidays intentionally uses "World" instead of "International" (e.g., "World Labour Day") to maintain accuracy with official Timor-Leste government sources, even though code comments and other localizations like en_US use "International".
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2601
File: holidays/countries/mongolia.py:140-146
Timestamp: 2025-06-15T11:50:44.366Z
Learning: The holidays library doesn't currently have helper functions like _add_holiday_span for adding consecutive multi-day holidays. Countries like Mongolia, Thailand, and Vietnam implement multi-day holiday spans using inline loops with _timedelta(dt, delta) pattern.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2614
File: holidays/countries/guyana.py:146-179
Timestamp: 2025-06-14T20:12:37.212Z
Learning: The _CustomHinduHolidays mechanism works through _CustomCalendarType metaclass which renames public attributes (like DIWALI_INDIA_DATES) with a postfix, allowing _HinduLunisolar::_get_holiday to find and use custom holiday dates. When _add_diwali_india() is called, it uses the custom dates if available rather than calculated dates.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2614
File: holidays/countries/guyana.py:146-179
Timestamp: 2025-06-14T20:12:37.212Z
Learning: The _CustomHinduHolidays mechanism works through _CustomCalendarType metaclass which renames public attributes (like DIWALI_INDIA_DATES) with a postfix, allowing _HinduLunisolar::_get_holiday to find and use custom holiday dates. When _add_diwali_india() is called, it uses the custom dates if available rather than calculated dates.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2651
File: holidays/locale/pap_BQ/LC_MESSAGES/BQ.po:70-72
Timestamp: 2025-06-25T14:08:09.323Z
Learning: The Papiamento translation "Di dos dia di Pasku" for "Tweede Kerstdag" (Boxing Day) in holidays/locale/pap_BQ/LC_MESSAGES/BQ.po comes from an authoritative source, despite the literal meaning potentially seeming to refer to Easter rather than Christmas.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2676
File: holidays/countries/tunisia.py:25-25
Timestamp: 2025-06-25T10:12:30.448Z
Learning: The holidays library intentionally duplicates label strings like estimated_label across country modules rather than centralizing them. This duplication is the established library-wide approach and should not be suggested for refactoring.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2386
File: holidays/countries/nepal.py:266-284
Timestamp: 2025-04-13T20:41:56.613Z
Learning: The Islamic holiday dates in the holidays library should only include officially verified dates, not predicted ones, to maintain accuracy. This is especially important for holidays that depend on lunar observations like Eid al-Fitr and Eid al-Adha.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2465
File: holidays/countries/suriname.py:219-251
Timestamp: 2025-04-13T19:10:31.502Z
Learning: The _CustomIslamicHolidays classes in this project contain only exact verified holiday dates from reliable sources, rather than calculated or estimated future dates. This is by design to ensure accuracy, particularly for religious holidays that may follow lunar calendars or depend on local observations.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2398
File: tests/countries/test_guinea.py:30-39
Timestamp: 2025-04-02T13:58:21.457Z
Learning: Second Republic Day in Guinea was abolished by at least 2022 according to Decree D/2022/0526/PRG/CNRD/SGG, and this is correctly implemented in the holidays library by only including the holiday for years up to and including 2021.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2349
File: tests/countries/test_taiwan.py:0-0
Timestamp: 2025-03-13T15:17:45.519Z
Learning: For Taiwan's holiday system, different categories (GOVERNMENT, OPTIONAL, SCHOOL, WORKDAY) have distinct uses and contexts, justifying separate instances rather than parameterization in tests.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2490
File: holidays/locale/en_ET/LC_MESSAGES/ET.po:95-101
Timestamp: 2025-04-23T09:51:03.951Z
Learning: Ethiopian holiday translations should follow the exact wording from official government sources (such as Negarit Gazeta Proclamations), even when they contain seemingly redundant wording like "Day" appearing twice.
</retrieved_learning>

<retrieved_learning>
Learnt from: nalin-28
PR: #2398
File: holidays/countries/guinea.py:65-72
Timestamp: 2025-04-01T06:13:19.221Z
Learning: Guinea stopped recognizing "Second Republic Day" and "All Saint's Day" as public holidays from 2021 onwards.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2402
File: holidays/countries/trinidad_and_tobago.py:75-76
Timestamp: 2025-04-05T09:44:39.998Z
Learning: In the holidays library, en_US locale is the standard for localization comments (using American English spelling like "Labor"), while the actual holiday names in code use the appropriate locale-specific spelling (like "Labour" for British English locales such as en_TT).
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2654
File: holidays/locale/de/LC_MESSAGES/CV.po:57-60
Timestamp: 2025-07-04T08:53:54.095Z
Learning: For Cape Verde German localization, holiday translations should follow Cape Verde-specific German terminology as found in sources like feelcaboverde.com, rather than standard German usage. The German translation choices are source-specific to Cape Verde context.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2323
File: holidays/locale/zh_CN/LC_MESSAGES/MO.po:230-234
Timestamp: 2025-03-04T14:38:15.029Z
Learning: For Macau holidays localization, official Macau government sources (e.g., gov.mo) should be the reference for correct terminology, even when it differs from mainland Chinese standards.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2631
File: tests/countries/test_sint_maarten.py:62-0
Timestamp: 2025-06-14T20:46:32.773Z
Learning: In the vacanza/holidays project tests, inner classes that shadow outer test class names are not standard practice. The test_sint_maarten.py file appears to be the only file using this pattern, making it an outlier rather than following project conventions.
</retrieved_learning>

<retrieved_learning>
Learnt from: Wasif-Shahzad
PR: #2593
File: holidays/calendars/islamic.py:3993-3994
Timestamp: 2025-06-04T10:09:28.732Z
Learning: In the holidays/calendars/islamic.py file, the Islamic calendar date methods in the _IslamicLunar class (like ali_al_rida_death_dates, ashura_dates, etc.) follow a consistent pattern of being single-line methods that return self._get_holiday(CONSTANT, year) without docstrings. New methods should follow this same pattern for consistency.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2653
File: holidays/locale/th/LC_MESSAGES/TW.po:17-21
Timestamp: 2025-06-21T18:06:50.027Z
Learning: KJhellico's username includes a tilde character (~) as part of their nickname (appears as "~Jhellico" in Last-Translator headers), which is intentional formatting and not an error.
</retrieved_learning>

<retrieved_learning>
Learnt from: Roshan-1024
PR: #2525
File: holidays/countries/togo.py:133-133
Timestamp: 2025-05-04T11:29:25.179Z
Learning: Use straight apostrophes (') rather than curly apostrophes (') in code strings for consistency and to avoid potential string comparison issues or bugs.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2388
File: holidays/countries/ivory_coast.py:84-85
Timestamp: 2025-03-30T08:08:31.656Z
Learning: Islamic holiday logic should be implemented in the holidays/groups/islamic.py file, with country-specific files only calling these methods with the appropriate translated names.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2388
File: holidays/countries/ivory_coast.py:84-85
Timestamp: 2025-03-30T08:08:30.415Z
Learning: Islamic holiday logic should be implemented in the holidays/groups/islamic.py file, with country-specific files only calling these methods with the appropriate translated names.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2416
File: tests/countries/test_turkmenistan.py:85-86
Timestamp: 2025-04-05T04:29:38.042Z
Learning: For testing holiday implementations in the vacanza/holidays repository, recommend using from tests.common import CommonCountryTests as the base class instead of directly using unittest.TestCase to maintain consistency with project conventions and leverage common test utilities.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2642
File: holidays/countries/french_southern_territories.py:41-44
Timestamp: 2025-06-18T10:07:58.780Z
Learning: Territorial holiday classes that inherit from parent countries (like HolidaysAX from Finland, HolidaysSJ from Norway, HolidaysTF from France) follow a standard pattern of silently overriding self.subdiv in their _populate_public_holidays() method without validation, as this ensures they always use the correct subdivision code for their territory regardless of user input.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2362
File: holidays/ical.py:176-180
Timestamp: 2025-03-26T08:50:03.504Z
Learning: The "EN" in the PRODID line of the iCalendar export (f"PRODID:-//Vacanza//Open World Holidays Framework v{self.holidays_version}//EN") should be kept as a fixed identifier by design, as agreed upon by the team, even though the actual holiday language may be different.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2388
File: holidays/locale/en_CI/LC_MESSAGES/CI.po:88-88
Timestamp: 2025-03-30T18:25:07.087Z
Learning: In the holidays library, localization files have a specific structure: message comments are in standard English (en_US) describing the holiday, while actual translations (msgstr) should use the locale-specific terminology (e.g., en_CI for Ivory Coast English). For example, "Night of Power" in standard English is translated as "Lailatou-Kadr" in Ivory Coast English.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2524
File: holidays/countries/grenada.py:81-83
Timestamp: 2025-05-03T20:16:58.203Z
Learning: In the Vacanza holidays library, localization (l10n) comments are always written in American English (en_US locale), even when the translatable strings use different regional spellings. For example, comments use "Labor Day" while the corresponding translatable string might use "Labour Day".
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2654
File: snapshots/countries/CV_RS.json:471-478
Timestamp: 2025-06-24T17:26:17.728Z
Learning: Snapshot files in the holidays library (like those in snapshots/countries/) are generated automatically and should not be manually edited. Any issues with snapshot content should be addressed in the source code that generates them, not in the snapshot files themselves.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2407
File: snapshots/countries/TL_COMMON.json:7-7
Timestamp: 2025-04-03T05:59:57.480Z
Learning: In the holidays project, snapshot files (like snapshots/countries/TL_COMMON.json) are auto-generated when running make snapshot and should not be manually edited. Semicolons (;) in holiday entries are used as separators when multiple holidays occur on the same date.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2629
File: tests/countries/test_namibia.py:22-23
Timestamp: 2025-06-14T10:58:43.636Z
Learning: In the vacanza/holidays project, country test files consistently use range(start_year, 2050) which intentionally excludes 2050 and stops at 2049. This is a library-wide implementation pattern, not an off-by-one error.
</retrieved_learning>

<retrieved_learning>
Learnt from: Wasif-Shahzad
PR: #2522
File: holidays/countries/yemen.py:158-163
Timestamp: 2025-05-06T13:01:22.693Z
Learning: In the holidays library, the RAMADAN_BEGINNING_DATES dictionary in country-specific Islamic holiday classes (like YemenIslamicHolidays) is used indirectly through the backend. When a country class calls _add_holiday_29_ramadan(), the IslamicHolidays implementation uses the country's custom calendar dates to calculate the 29th day of Ramadan by adding 28 days to the beginning date.
</retrieved_learning>

<retrieved_learning>
Learnt from: arkid15r
PR: #2501
File: scripts/docs/gen_index.py:15-18
Timestamp: 2025-04-26T19:26:23.657Z
Learning: Only suggest module imports that are needed for the current code implementation, not for potential future changes. In Python code reviews, avoid suggesting importing modules (like re) that aren't currently being used.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2490
File: holidays/locale/en_ET/LC_MESSAGES/ET.po:99-101
Timestamp: 2025-04-23T09:53:20.043Z
Learning: For Ethiopian holidays in the en_ET locale, translations must maintain the exact official wording from government sources such as Negarit Gazeta Proclamations, even when they contain redundancies like the word "Day" appearing twice (e.g., "Ethiopian National Unity Day (Ethiopian Nations and Nationalities) Day").
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2654
File: holidays/locale/de/LC_MESSAGES/CV.po:37-40
Timestamp: 2025-07-04T08:54:03.168Z
Learning: In German localization for Cape Verde holidays, "Dia da Nacionalidade e dos Heróis Nacionais" is translated as "Tag der Nationalhelden" (not "Tag der Nationalität und der Nationalhelden") based on authoritative German language sources about Cape Verde holidays, specifically from feelcaboverde.com.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2654
File: holidays/locale/de/LC_MESSAGES/CV.po:37-40
Timestamp: 2025-07-04T08:54:03.168Z
Learning: In German localization for Cape Verde holidays, "Dia da Nacionalidade e dos Heróis Nacionais" is translated as "Tag der Nationalhelden" (not "Tag der Nationalität und der Nationalhelden") based on authoritative German language sources about Cape Verde holidays, specifically from feelcaboverde.com.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2385
File: holidays/locale/en_US/LC_MESSAGES/PK.po:17-26
Timestamp: 2025-03-28T21:04:53.171Z
Learning: Always verify the current year before flagging dates in project metadata as "future dates." As of March 2025, dates with year 2025 are current, not future dates.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2676
File: holidays/locale/en_US/LC_MESSAGES/TN.po:17-28
Timestamp: 2025-06-26T15:34:35.476Z
Learning: In the holidays project, .po file header metadata updates (version numbers, revision dates, translator information) are legitimate changes when part of localization work and don't require make l10n regeneration. The make l10n command is primarily for formatting fixes and missing translator comments, not for intentional metadata updates.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2608
File: holidays/locale/en_VC/LC_MESSAGES/VC.po:61-66
Timestamp: 2025-06-10T05:07:29.372Z
Learning: For missing translator comments in .po localization files in the holidays repository, direct authors to run make l10n or make check commands instead of suggesting manual fixes, as these commands automatically handle translator comment generation.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2608
File: holidays/locale/en_US/LC_MESSAGES/VC.po:76-76
Timestamp: 2025-06-10T05:08:07.939Z
Learning: For the holidays project, localization file formatting issues (like missing terminal periods in .po files) should be automatically fixed by running make l10n command (which is included in make check). Authors should be directed to use this automated tooling instead of manual formatting fixes.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2607
File: scripts/l10n/l10n_helper.py:147-150
Timestamp: 2025-06-06T15:22:39.950Z
Learning: In the holidays project localization system, all .po files are generated from the same .pot template for all supported languages, ensuring that all msgids exist for all languages. This makes defensive programming for missing language keys in po_data[msgid] unnecessary in the normal workflow.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2537
File: holidays/countries/finland.py:195-199
Timestamp: 2025-05-09T18:34:33.990Z
Learning: In the holidays library, localization (l10n) is handled through separate .po files for different languages rather than combining multiple translations in a single string. The code should use the default language with tr() function, and translations are provided in language-specific .po files.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2687
File: holidays/locale/en_US/LC_MESSAGES/CF.po:13-28
Timestamp: 2025-06-29T09:37:35.283Z
Learning: In the holidays project, .po files follow a standard formatting convention where there is always a blank line after the metadata header section (after the "X-Source-Language" line). This blank line separates the header from the actual translation content and should not be removed.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2608
File: holidays/locale/en_VC/LC_MESSAGES/VC.po:1-14
Timestamp: 2025-06-10T12:17:58.880Z
Learning: In the holidays project, .po files should use the full multi-line header format including the project description, authors, website, and license information, rather than a single-line comment format.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2259
File: holidays/locale/en_IN/LC_MESSAGES/IN.po:30-299
Timestamp: 2025-03-05T17:51:00.633Z
Learning: In the Holidays project, .po files for a country's default locale use empty msgstr fields as a standard convention.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2651
File: holidays/locale/nl/LC_MESSAGES/BQ.po:29-95
Timestamp: 2025-06-25T20:55:00.642Z
Learning: In the holidays library, Dutch locale files (.po) with X-Source-Language: nl should have empty msgstr entries when the target language is also Dutch. The library uses fallback=True with gettext, which returns the original msgid when msgstr is empty. This is the correct pattern for native language files and does not cause blank holiday names.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2402
File: holidays/locale/en_TT/LC_MESSAGES/TT.po:46-48
Timestamp: 2025-04-05T08:12:19.986Z
Learning: In the holidays library, localization (PO) files follow this convention: comments (#.) always use American English (en_US) spelling, while the msgid content follows the locale-specific spelling standards of the target language.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2386
File: tests/countries/test_nepal.py:551-554
Timestamp: 2025-05-01T19:19:42.346Z
Learning: In the holidays library, when multiple holidays fall on the same date, their names are always sorted alphabetically (in setitem of HolidayBase), so the order of addition does not affect the resulting string.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2386
File: holidays/countries/nepal.py:203-208
Timestamp: 2025-05-01T19:13:44.664Z
Learning: Multiple holidays on the same date are properly handled in the holidays library. When multiple _add_... methods are called with different holiday names for the same date, both holidays are preserved rather than the latter overwriting the former. This happens because the __setitem__ method in HolidayBase merges multiple holidays on the same date by combining their names.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2537
File: tests/countries/test_finland.py:23-26
Timestamp: 2025-05-09T18:36:09.607Z
Learning: The holidays project prioritizes complete historical coverage in tests, verifying holidays from their first year of observance (e.g., 1853 for Finland) through future projections, rather than using shorter sliding windows.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2489
File: holidays/countries/sao_tome_and_principe.py:1-12
Timestamp: 2025-04-24T04:59:38.436Z
Learning: The holidays library uses a standard file header across country implementation files that includes copyright information, authors, website, and license details. New country implementation files should follow this same header format.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2489
File: holidays/countries/sao_tome_and_principe.py:1-12
Timestamp: 2025-04-24T04:59:38.436Z
Learning: The holidays library uses a standard file header across country implementation files that includes copyright information, authors, website, and license details. New country implementation files should follow this same header format.
</retrieved_learning>

<retrieved_learning>
Learnt from: KJhellico
PR: #2530
File: tests/countries/test_andorra.py:23-28
Timestamp: 2025-05-06T21:07:11.577Z
Learning: In the holidays project, test methods for country holidays follow a standard form where year ranges are explicitly recreated in each test method rather than being stored as class variables, to maintain consistency across all country tests.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2642
File: snapshots/countries/FR_6AE.json:690-706
Timestamp: 2025-06-18T10:33:29.809Z
Learning: During the French "journée de solidarité" experiment (2004-2007), Whit Monday was removed nationwide from 2005-2007, including in Alsace-Moselle subdivisions (FR_57, FR_6AE) that typically maintain additional regional holidays like Good Friday and Saint Stephen's Day.
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2323
File: holidays/countries/macau.py:278-377
Timestamp: 2025-03-05T02:35:03.298Z
Learning: For Macau holiday implementations, it's preferable to maintain separate methods for different holiday categories (MANDATORY, GOVERNMENT, PUBLIC) as they are based on different sets of laws, making the code easier to maintain despite having multiple year-based conditionals.
</retrieved_learning>

<retrieved_learning>
Learnt from: ankushhKapoor
PR: #2601
File: holidays/locale/en_MN/LC_MESSAGES/MN.po:13-14
Timestamp: 2025-06-11T18:32:25.595Z
Learning: For non-default locale .po files, the header comment format is:
# <Country> holidays <locale> localization. (no trailing hash).
</retrieved_learning>

<retrieved_learning>
Learnt from: PPsyrius
PR: #2643
File: holidays/countries/mauritius.py:171-184
Timestamp: 2025-06-19T02:34:14.456Z
Learning: In the holidays library, _CustomIslamicHolidays subclasses follow a consistent pattern of NOT having docstrings. They go directly to defining date dictionaries, as evidenced by Malaysia, Singapore, UAE, and dozens of other country implementations.
</retrieved_learning>

🧬 Code Graph Analysis (1)
tests/countries/test_saint_vincent_and_the_grenadines.py (2)
tests/common.py (9)
  • TestCase (28-338)
  • CommonCountryTests (356-374)
  • assertAliases (121-130)
  • assertNoHolidays (292-294)
  • assertHolidayName (195-199)
  • assertNoNonObservedHoliday (248-250)
  • assertNoHolidayName (273-275)
  • assertHolidays (228-230)
  • assertLocalizedHolidays (327-338)
holidays/countries/saint_vincent_and_the_grenadines.py (3)
  • SaintVincentAndTheGrenadines (20-104)
  • VC (107-108)
  • VCT (111-112)
🔇 Additional comments (21)
README.md (1)

1249-1254: Row addition looks clean.

The new Saint Vincent and the Grenadines entry follows the existing HTML structure, is alphabetically placed, and highlights en_VC as the default language—LGTM.

holidays/locale/en_VC/LC_MESSAGES/VC.po (2)

17-19: Double-check Project-Id-Version.

Header says Holidays 0.76; the current dev branch still reports 0.75 in most catalog headers. Make sure the version bump is intentional and consistent across all .po files; otherwise the diff will look noisy next release.


1-14: Header format is correct for default locale – nice.
No issues found; file follows project conventions with empty msgstr entries.

holidays/locale/en_US/LC_MESSAGES/VC.po (2)

30-34: Confirmed: non-default locale translates “observed” suffix.
Translation matches source, preventing fallback glitches—good.


17-20: Keep version header consistent, as above.
If 0.76 is deliberate, all other catalogs should be regenerated; if not, revert to the current tag before merging.

snapshots/countries/VC_COMMON.json (1)

1-964: Snapshot looks mechanically correct – just double-check it wasn’t tweaked by hand.

All dates parse as ISO‐8601, the “;” separator is present only when two holidays coincide, and there are no duplicate keys or trailing commas.
Assuming this file was produced via the usual make snapshot target, nothing further is needed.

If you generated the file manually, please rerun make snapshot to avoid drift between source logic and the snapshot.

tests/countries/test_saint_vincent_and_the_grenadines.py (10)

1-21: File structure looks solid.

The header, imports, and class setup follow the established holidays library patterns perfectly. Clean implementation.


23-27: Test class setup follows project conventions perfectly.

The class inheritance and setUpClass method match the established patterns with correct year ranges.


29-33: Standard country tests implemented correctly.

Both the aliases test and no-holidays-before-start-year test follow the expected patterns.


35-39: New Year's Day test follows the correct pattern.

Good implementation using direct string literal and correctly omitting observed rule testing per the established guidance.


41-88: Observed holiday tests well-structured.

All tests follow the established pattern with proper variable naming (obs_dt) and correct assertions for both observed and non-observed cases.


90-93: Spiritual Baptist Day test handles year restriction correctly.

Good implementation testing the holiday from 2025 onwards and verifying its absence in earlier years.


95-178: Comprehensive holiday coverage with consistent patterns.

All remaining holiday tests follow the established conventions with proper observed testing and consistent variable naming. Test order matches implementation order nicely.


180-181: Special holidays test covers the static holiday entries.

Clean implementation for testing the 2021 Public Health Holidays.


183-199: Comprehensive 2024 holiday verification looks complete.

Good coverage of all holidays for a specific year, including observed dates. This complements the individual holiday tests well.


201-234: Localization tests properly use 2025 to capture all holidays.

Smart choice using 2025 to include the new Spiritual Baptist Day. The consistent holiday names across locales appears intentional for this implementation.

holidays/countries/saint_vincent_and_the_grenadines.py (5)

13-18: Imports look solid.

All calendar constants and utilities are properly used throughout the implementation.


20-51: Class structure follows project conventions perfectly.

Proper inheritance chain, explicit mixin initialization, and correct observed rule setup.


52-105: Holiday implementation is comprehensive and well-structured.

Proper use of observed rules, special carnival date handling, and appropriate holiday method calls throughout.


107-113: Alias classes follow the established project pattern.

Correctly omit docstrings per project convention for country code aliases.


115-130: Static holidays class is properly implemented.

Correct tuple format for holiday definitions and appropriate reference documentation.

waqar2403 and others added 5 commits July 7, 2025 18:21
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Muhammad Waqar <[email protected]>
Signed-off-by: Muhammad Waqar <[email protected]>
Signed-off-by: Muhammad Waqar <[email protected]>
Signed-off-by: Muhammad Waqar <[email protected]>
waqar2403 and others added 3 commits July 8, 2025 07:01
Co-authored-by: ~Jhellico <[email protected]>
Signed-off-by: Muhammad Waqar <[email protected]>
Co-authored-by: ~Jhellico <[email protected]>
Signed-off-by: Muhammad Waqar <[email protected]>
KJhellico
KJhellico previously approved these changes Jul 8, 2025
Copy link
Collaborator

@KJhellico KJhellico left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! 👍

Copy link

sonarqubecloud bot commented Jul 8, 2025

Copy link
Collaborator

@KJhellico KJhellico left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This solution can be used in other places! 🚀

@arkid15r arkid15r enabled auto-merge July 8, 2025 16:08
Copy link
Collaborator

@arkid15r arkid15r left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM
Thanks for adding this @waqar2403 !

@arkid15r arkid15r added this pull request to the merge queue Jul 8, 2025
Merged via the queue into vacanza:dev with commit 948ce0f Jul 8, 2025
33 checks passed
@coderabbitai coderabbitai bot mentioned this pull request Jul 9, 2025
9 tasks
@arkid15r arkid15r mentioned this pull request Jul 21, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add Saint Vincent and the Grenadines holidays
4 participants