-
Notifications
You must be signed in to change notification settings - Fork 14
Overall proofreading and tool modification by AI (2) #90
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
Conversation
…ew settings configuration
…ml and improve markdown generation
…on and fix typos - Replace brittle switch-case mapping with generic kebab-to-CamelCase converter - Fix frontmatter stripping regex to handle corrupted patterns like "1---" - Add validation for contents.html parsing with error messages - Improve best practices section heading handling to avoid duplicates - Fix 34+ typos across English and Japanese documentation - Add non-root user to Dockerfile for security compliance - Regenerate 1page.md files with all fixes applied 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
…arity and structure
…itialization for improved plugin management
…t annotation in 1page.md
- Fix frontmatter stripping regex to handle corrupted patterns like "1---" - Change section separators from --- to *** to avoid markdown parser confusion - Track actual files processed count instead of file order length - Improve best practices heading handling to preserve meaningful context - Convert headings to level 3 while preserving original heading text 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
…er maintainability - Extract determine_file_order method to handle file ordering logic - Extract write_header method to handle header generation - Extract process_main_files method to handle main documentation files - Extract process_best_practices method to handle best practices section - Improve readability and maintainability while preserving all functionality - Make methods private to encapsulate implementation details 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
…ate injector instantiation in GettingStarted.md
- Add 'set -euo pipefail' to copy_markdown_files.sh and entrypoint.sh - Enable exit on error, unset variable usage, and failed pipeline commands - Prevent silent failures and ensure safer script execution - Improve reliability and debugging capabilities 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
Reviewer's GuideThis PR refactors the markdown merging script, introduces Bash automation and non-root Docker setup, generates consolidated one-page manuals with updated navigation, corrects frontmatter parsing and numerous doc typos, bumps Jekyll and plugin versions, and enhances llms link extraction logic. Class diagram for refactored merge_md_files.rb scriptclassDiagram
class MergeMdFiles {
+convert_to_markdown_filename(base_name)
+extract_order_from_contents(language)
+strip_frontmatter(content)
+generate_combined_file(language, intro_message)
}
MergeMdFiles : - Pathname usage for file operations
MergeMdFiles : - Navigation order from contents.html
MergeMdFiles : - Skips non-docs pages (ai-assistant, index, 1page)
MergeMdFiles : - Formats best-practice headings
Class diagram for corrected PHP code examples in documentationclassDiagram
class FlickrPhotoSummarizer {
+__construct(PhotoPatternMatcherInterface matcher)
+summarize(Uri uri): ?string
}
class TweetPrettifier {
+__construct(Map summarizers, EmoticonImagifier emoticonImagifier)
+prettifyTweet(String tweetMessage): Html
+prettifyUri(Uri uri): string
+doSomething(): void
}
class PrettyTweets {
+__invoke(): void
}
class MyWebServer {
+__construct(RequestLoggingInterface, RequestHandlerInterface, AuthenticationInterface, Database)
+start(): void
+__invoke(): void
}
FlickrPhotoSummarizer --> PhotoPatternMatcherInterface
TweetPrettifier --> EmoticonImagifier
TweetPrettifier --> FlickrPhotoSummarizer
PrettyTweets --> TweetPrettifier
MyWebServer --> RequestLoggingInterface
MyWebServer --> RequestHandlerInterface
MyWebServer --> AuthenticationInterface
MyWebServer --> Database
Flow diagram for Bash automation scripts in Dockerflowchart TD
entrypoint[entrypoint.sh]
build[bundle exec jekyll build]
copy[copy_markdown_files.sh]
serve[bundle exec jekyll serve]
entrypoint --> build --> copy --> serve
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
Warning Rate limit exceeded@koriym has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 10 minutes and 25 seconds before requesting another review. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📒 Files selected for processing (2)
WalkthroughThis update introduces a new single-page manual for Ray.Di (English), refactors the markdown merging script to align with navigation order, and migrates markdown copying from a Ruby plugin to a Bash script. The Dockerfile is updated for non-root execution and uses new entrypoint scripts. Numerous documentation typos and code examples are corrected throughout both English and Japanese manuals. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant DockerContainer
participant EntrypointScript
participant Jekyll
participant CopyMarkdownScript
User->>DockerContainer: Start container
DockerContainer->>EntrypointScript: Run entrypoint.sh
EntrypointScript->>Jekyll: bundle exec jekyll build
EntrypointScript->>CopyMarkdownScript: ./bin/copy_markdown_files.sh
CopyMarkdownScript->>CopyMarkdownScript: Copy & clean markdown files
EntrypointScript->>Jekyll: bundle exec jekyll serve --host 0.0.0.0 --watch
User->>Jekyll: Access site on port 4000
Possibly related PRs
Poem
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed 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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey @koriym - I've reviewed your changes and found some issues that need to be addressed.
Blocking issues:
- Use of undefined variable 'message' in sayHello() (link)
General comments:
- Consider parameterizing the hardcoded manual version (e.g. “1.0”) and language paths in your merge_md_files.rb script so it can be easily reused for future versions without editing the code.
- The determine_file_order step now relies on scraping contents.html but has no fallback if the HTML structure changes—adding more robust parsing or explicit warnings when no ordering is detected would help diagnose changes in navigation markup.
- This PR mixes large documentation fixes with substantial Ruby script and build‐tool refactoring; splitting the content corrections from tooling changes into separate commits or PRs would make review and potential rollbacks much easier.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- Consider parameterizing the hardcoded manual version (e.g. “1.0”) and language paths in your merge_md_files.rb script so it can be easily reused for future versions without editing the code.
- The determine_file_order step now relies on scraping contents.html but has no fallback if the HTML structure changes—adding more robust parsing or explicit warnings when no ordering is detected would help diagnose changes in navigation markup.
- This PR mixes large documentation fixes with substantial Ruby script and build‐tool refactoring; splitting the content corrections from tooling changes into separate commits or PRs would make review and potential rollbacks much easier.
## Individual Comments
### Comment 1
<location> `manuals/1.0/ja/1page.md:147` </location>
<code_context>
+ private InMemoryTransactionLog $transactionLog;
+ private FakeCreditCardProcessor $processor;
+
+ public function setUp(): void
+ {
+ $this->order = new PizzaOrder(100);
+ $this->creditCard = new CreditCard('1234', 11, 2010);
+ $this->processor = new FakeCreditCardProcessor();
+ TransactionLogFactory::setInstance($transactionLog);
+ CreditCardProcessorFactory::setInstance($this->processor);
</code_context>
<issue_to_address>
Possible missing assignment for transactionLog in setUp()
$this->transactionLog should be initialized in setUp() before use in assertions.
</issue_to_address>
<suggested_fix>
<<<<<<< SEARCH
public function setUp(): void
{
$this->order = new PizzaOrder(100);
$this->creditCard = new CreditCard('1234', 11, 2010);
$this->processor = new FakeCreditCardProcessor();
TransactionLogFactory::setInstance($this->transactionLog);
CreditCardProcessorFactory::setInstance($this->processor);
}
=======
public function setUp(): void
{
$this->order = new PizzaOrder(100);
$this->creditCard = new CreditCard('1234', 11, 2010);
$this->transactionLog = new InMemoryTransactionLog();
$this->processor = new FakeCreditCardProcessor();
TransactionLogFactory::setInstance($this->transactionLog);
CreditCardProcessorFactory::setInstance($this->processor);
}
>>>>>>> REPLACE
</suggested_fix>
### Comment 2
<location> `manuals/1.0/ja/1page.md:169` </location>
<code_context>
+
+ $this->assertTrue($receipt->hasSuccessfulCharge());
+ $this->assertEquals(100, $receipt->getAmountOfCharge());
+ $this->assertEquals($creditCard, $processor->getCardOfOnlyCharge());
+ $this->assertEquals(100, $processor->getAmountOfOnlyCharge());
+ $this->assertTrue($this->transactionLog->wasSuccessLogged());
+ }
</code_context>
<issue_to_address>
Undefined variables in test assertions
$creditCard and $processor should be defined or accessed with $this-> to avoid scope errors in the test.
</issue_to_address>
### Comment 3
<location> `manuals/1.0/ja/1page.md:383` </location>
<code_context>
+
+ public function sayHello(): void
+ {
+ for ($i=0; $i < $this->count; $i++) {
+ echo $message;
+ }
+ }
</code_context>
<issue_to_address>
Use of undefined variable 'message' in sayHello()
Replace 'echo $message;' with 'echo $this->message;' to reference the class property correctly.
</issue_to_address>
### Comment 4
<location> `bin/merge_md_files.rb:53` </location>
<code_context>
+ content.sub(/\A\d*---\s*\n.*?\n---\s*\n/m, '')
end
def generate_combined_file(language, intro_message)
source_folder = File.expand_path("../manuals/1.0/#{language}/", __dir__)
output_file = "manuals/1.0/#{language}/1page.md"
</code_context>
<issue_to_address>
Consider collapsing the file ordering and writing logic into a single streamlined pipeline within generate_combined_file.
```markdown
There’s still a lot of small methods and method‐hops for what is essentially “build an ordered list of files, then write them one after another.” You can collapse `determine_file_order`, `process_main_files` and `process_best_practices` into a single pipeline, e.g.:
```ruby
def generate_combined_file(language, intro_message)
source = Pathname.new(__dir__).join("..", "manuals/1.0/#{language}")
raise "Missing folder #{source}" unless source.directory?
# 1) Compute the order array (from contents.html or fallback to filenames)
order =
extract_order_from_contents(language) ||
source.glob("*.md").map(&:basename).map(&:to_s).sort -
%w[1page.md ai-assistant.md]
# 2) Gather both main and BP files into one list, preserving relative order
main = order.map { |fn| source.join(fn) }
bp_files = source.join("bp").directory? ? source.join("bp").glob("*.md").sort : []
all_files = (main + bp_files).select(&:file?)
File.open(source.join("1page.md"), "w") do |out|
# write header
out.write <<~HDR
---
layout: docs-#{language}
title: 1 Page Manual
category: Manual
permalink: /manuals/1.0/#{language}/1page.html
---
#{intro_message}
***
HDR
# 3) Single pass to write content (+ optional BP heading rewrite)
all_files.each_with_index do |path, idx|
raw = strip_frontmatter(path.read).strip
next if raw.empty?
out.write "\n***\n\n" if idx > 0
if path.dirname.basename.to_s == "bp"
# promote first h1/h2=>h3 or default to filename
if raw =~ /\A(#+)\s*(.+?)\n/m
out.write "### #{$2}\n\n" << raw.split("\n", 2).last
else
title = path.basename(".md").to_s.gsub(/([A-Z])/, ' \1').strip
out.write "### #{title}\n\n#{raw}"
end
else
out.write raw
end
end
end
end
```
Key changes:
1. Inline all file‐gathering and processing in one loop.
2. Use a single `all_files` array sorted by your front-matter or HTML order, with BP at the end.
3. Drop separate `process_main_files` / `process_best_practices` helpers.
4. Keep `extract_order_from_contents`, `strip_frontmatter` as small focused helpers.
</issue_to_address>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 11
🔭 Outside diff range comments (3)
manuals/1.0/en/ProviderBindings.md (1)
33-36: PHP snippet has mismatched parentheses.
public function __construct(block currently ends with)... ) {}– one extra)sneaks in and will not parse.- public function __construct( - private readonly ConnectionInterface $connection) - ){} + public function __construct( + private readonly ConnectionInterface $connection + ) {}manuals/1.0/en/ContextualBindings.md (1)
35-36: Missing closing]in attribute inside constructor.- public function __construct(#[Named('db_config') array $dbConfigs) + public function __construct(#[Named('db_config')] array $dbConfigs)Without it, the example will not compile.
manuals/1.0/en/GettingStarted.md (1)
76-80: Undefined variable$message– should be$this->message
Greeter::sayHello()echoes an un-scoped variable, which will trigger an “Undefined variable” notice and output nothing.- echo $message; + echo $this->message;This is user-visible in every snippet that readers will copy-paste – worth fixing.
🧹 Nitpick comments (11)
manuals/1.0/en/ContextualBindings.md (1)
57-60: Attribute fixed but qualifier names drift from earlier bindings.
Provider bindings useusr_db,job_db,log_db, whereas constructor expects'user','job','log'. Readers may be confused. Consider aligning names or adding a note.manuals/1.0/en/Injections.md (2)
88-88: Missing space makes the sentence hard to read
...)]attribute:→ add a space before attribute.
This is purely cosmetic but improves readability in rendered HTML.
96-97: Consider clarifying the dual-attribute examplePlacing
#[Inject(optional: true)]on the method and#[Named(...)]on the parameter is correct, but some readers mis-interpret it as parameter-level optionality.
A short inline comment such as// optional method injectionright after the attribute would avoid that confusion.manuals/1.0/ja/InjectingProviders.md (1)
93-94: Nit: remove redundant temporary assignmentBecause
$connectionisn’t used elsewhere, you can inline the call:if (! $result->wasSuccessful()) { $this->connectionProvider->get()->writeFailure($result); }(assuming the connection object offers such a method).
manuals/1.0/en/Installation.md (1)
1-6: File name casing is inconsistent with permalink and other manualsThe file is named
Installation.md(capital “I”), whereas all permalinks and cross-links use the lowercase sluginstallation. Mixing cases can break links on case-sensitive filesystems (e.g. Linux hosting) and violates the repository guideline of “descriptive names without numeric prefixes” (examples are lowercase).
Consider renaming the file toinstallation.mdto stay consistent and avoid 404s._includes/manuals/1.0/en/contents.html (1)
46-46: Clarify navigation label“1 Page” may be cryptic to new readers. A more descriptive label such as “Single Page” or “All-in-One” improves discoverability while remaining concise.
-<a class="nav-link {% if page.permalink == '/manuals/1.0/en/1page.html' %}active{% endif %}" href="/manuals/1.0/en/1page.html">1 Page</a> +<a class="nav-link {% if page.permalink == '/manuals/1.0/en/1page.html' %}active{% endif %}" href="/manuals/1.0/en/1page.html">Single Page</a>manuals/1.0/en/ConstructorBindings.md (1)
61-63: Use a heading instead of emphasized text & fix wording
*postConstruct*is rendered as emphasis, which triggers MD036 and visually blends with body text. Promote it to a level-3 heading and tighten the sentence.-**postConstruct** - -Ray.Di will invoke that constructor and setter method to satisfy the binding and invoke in `$postConstruct` method after all dependencies are injected. +### postConstruct + +Ray.Di invokes the constructor and any specified setters, then calls the `$postConstruct` method after all dependencies are injected._includes/manuals/1.0/ja/contents.html (1)
47-47: Label should use Japanese to stay consistent with the rest of the menuEvery other navigation item is in Japanese, but this one is English (“1 Page”).
Consider switching to something like “全ページ” or “1ページ” for UI consistency.- <li class="nav-item"><a class="nav-link {% if page.permalink == '/manuals/1.0/ja/1page.html' %}active{% endif %}" href="/manuals/1.0/ja/1page.html">1 Page</a></li> + <li class="nav-item"><a class="nav-link {% if page.permalink == '/manuals/1.0/ja/1page.html' %}active{% endif %}" href="/manuals/1.0/ja/1page.html">全ページ</a></li>bin/entrypoint.sh (1)
4-11: Avoid double building and forward extra CLI args
jekyll serveperforms a build internally, so the explicitjekyll buildjust before it is redundant.
Also, passing through any container CMD args (e.g., port overrides) increases flexibility.-# Build the Jekyll site -bundle exec jekyll build - -# Copy markdown files for llms.txt compliance -./bin/copy_markdown_files.sh - -# Start Jekyll server with watch mode -bundle exec jekyll serve --host 0.0.0.0 --watch +# Initial build (needed for copy script) +bundle exec jekyll build +./bin/copy_markdown_files.sh + +# Serve – reuse the existing build & watch for changes +exec bundle exec jekyll serve --host 0.0.0.0 --watch "$@"bin/copy_markdown_files.sh (1)
24-24: YAML front-matter stripping misses CRLF / second marker edge-casesThe one-liner
sed '1{/^---$/!b}; 1,/^---$/d'assumes:
- the very first line is exactly
---(LF only)- the closing marker is another bare
---Files starting with a UTF-8 BOM, CRLF (
\r\n), or additional front-matter delimiters (---yamlblocks in the body) will either keep the header or delete more than intended.Consider the more resilient pattern below:
- sed '1{/^---$/!b}; 1,/^---$/d' "$file" > "$dest_file" + sed -E '1{/^\s*---\s*$/!b}; 1{/^\s*---\s*$/d; :a; N; /\n\s*---\s*\n/!ba; s/^\s*---\s*\n//; s/\n\s*---\s*\n/\n/}' "$file" > "$dest_file"Handles CRLF, leading BOM and stops exactly at the matching closing delimiter.
bin/merge_md_files.rb (1)
4-45: Great refactoring to use navigation order from contents.html!This approach is more reliable than extracting order from frontmatter. The method handles edge cases well with appropriate warnings.
The redundant assignment can be eliminated:
- markdown_files = permalinks.map do |permalink| + permalinks.map do |permalink| # Remove .html extension base = permalink.sub('.html', '') # Skip AI assistant and other non-documentation pages skip_pages = ['ai-assistant', 'index', '1page'] next nil if skip_pages.include?(base) # Convert kebab-case to CamelCase convert_to_markdown_filename(base) end.compact - - markdown_files
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
Gemfile.lockis excluded by!**/*.lock
📒 Files selected for processing (30)
.claude/settings.local.json(1 hunks)Dockerfile(1 hunks)Gemfile(3 hunks)_includes/manuals/1.0/en/contents.html(1 hunks)_includes/manuals/1.0/ja/contents.html(1 hunks)_plugins/copy_markdown.rb(0 hunks)bin/copy_markdown_files.sh(1 hunks)bin/entrypoint.sh(1 hunks)bin/merge_md_files.rb(1 hunks)llms-full.txt(5 hunks)manuals/1.0/en/1page.md(1 hunks)manuals/1.0/en/BindingAttributes.md(1 hunks)manuals/1.0/en/Bindings.md(1 hunks)manuals/1.0/en/ConstructorBindings.md(1 hunks)manuals/1.0/en/ContextualBindings.md(1 hunks)manuals/1.0/en/GettingStarted.md(3 hunks)manuals/1.0/en/Injections.md(2 hunks)manuals/1.0/en/Installation.md(1 hunks)manuals/1.0/en/Motivation.md(2 hunks)manuals/1.0/en/Multibindings.md(5 hunks)manuals/1.0/en/ProviderBindings.md(1 hunks)manuals/1.0/en/bp/MinimizeMutability.md(1 hunks)manuals/1.0/ja/GettingStarted.md(1 hunks)manuals/1.0/ja/InjectingProviders.md(3 hunks)manuals/1.0/ja/Injections.md(1 hunks)manuals/1.0/ja/MentalModel.md(2 hunks)manuals/1.0/ja/Motivation.md(4 hunks)manuals/1.0/ja/Multibindings.md(3 hunks)manuals/1.0/ja/ObjectLifeCycle.md(1 hunks)manuals/1.0/ja/bp/MinimizeMutability.md(1 hunks)
💤 Files with no reviewable changes (1)
- _plugins/copy_markdown.rb
🧰 Additional context used
📓 Path-based instructions (7)
`manuals/1.0/{en,ja}/*.md`: Documentation files use descriptive names without nu...
manuals/1.0/{en,ja}/*.md: Documentation files use descriptive names without numeric prefixes (e.g., 'installation.md', 'motivation.md')
Documentation files use Jekyll front matter with layout, title, category, and permalink
Permalinks for documentation files follow the pattern '/manuals/1.0/{lang}/{filename}.html'
URLs for markdown files follow the pattern '/manuals/1.0/{lang}/{filename}.md' (AI-accessible) and '/manuals/1.0/{lang}/{filename}.html' (human-readable)
📄 Source: CodeRabbit Inference Engine (CLAUDE.md)
List of files the instruction was applied to:
manuals/1.0/en/ProviderBindings.mdmanuals/1.0/en/Bindings.mdmanuals/1.0/en/Installation.mdmanuals/1.0/en/ConstructorBindings.mdmanuals/1.0/ja/ObjectLifeCycle.mdmanuals/1.0/en/Injections.mdmanuals/1.0/en/BindingAttributes.mdmanuals/1.0/en/GettingStarted.mdmanuals/1.0/en/ContextualBindings.mdmanuals/1.0/ja/Injections.mdmanuals/1.0/en/Motivation.mdmanuals/1.0/ja/Motivation.mdmanuals/1.0/ja/MentalModel.mdmanuals/1.0/en/1page.mdmanuals/1.0/en/Multibindings.mdmanuals/1.0/ja/InjectingProviders.mdmanuals/1.0/ja/GettingStarted.mdmanuals/1.0/ja/Multibindings.md
`manuals/1.0/en/*.md`: English documentation files use 'layout: docs-en', Japanese files use 'layout: docs-ja' in their front matter
manuals/1.0/en/*.md: English documentation files use 'layout: docs-en', Japanese files use 'layout: docs-ja' in their front matter
📄 Source: CodeRabbit Inference Engine (CLAUDE.md)
List of files the instruction was applied to:
manuals/1.0/en/ProviderBindings.mdmanuals/1.0/en/Bindings.mdmanuals/1.0/en/Installation.mdmanuals/1.0/en/ConstructorBindings.mdmanuals/1.0/en/Injections.mdmanuals/1.0/en/BindingAttributes.mdmanuals/1.0/en/GettingStarted.mdmanuals/1.0/en/ContextualBindings.mdmanuals/1.0/en/Motivation.mdmanuals/1.0/en/1page.mdmanuals/1.0/en/Multibindings.md
`manuals/1.0/ja/*.md`: Japanese documentation files use 'layout: docs-ja' in their front matter
manuals/1.0/ja/*.md: Japanese documentation files use 'layout: docs-ja' in their front matter
📄 Source: CodeRabbit Inference Engine (CLAUDE.md)
List of files the instruction was applied to:
manuals/1.0/ja/ObjectLifeCycle.mdmanuals/1.0/ja/Injections.mdmanuals/1.0/ja/Motivation.mdmanuals/1.0/ja/MentalModel.mdmanuals/1.0/ja/InjectingProviders.mdmanuals/1.0/ja/GettingStarted.mdmanuals/1.0/ja/Multibindings.md
`manuals/1.0/{en,ja}/bp/*.md`: Best practices files in 'bp/' subdirectory use descriptive hyphenated names
manuals/1.0/{en,ja}/bp/*.md: Best practices files in 'bp/' subdirectory use descriptive hyphenated names
📄 Source: CodeRabbit Inference Engine (CLAUDE.md)
List of files the instruction was applied to:
manuals/1.0/ja/bp/MinimizeMutability.mdmanuals/1.0/en/bp/MinimizeMutability.md
`bin/copy_markdown_files.sh`: The 'bin/copy_markdown_files.sh' script copies all...
bin/copy_markdown_files.sh: The 'bin/copy_markdown_files.sh' script copies all markdown files after Jekyll build to the '_site' directory for direct access
Markdown files are manually copied to '_site' directory for direct access, supporting llms.txt standard for AI assistants
📄 Source: CodeRabbit Inference Engine (CLAUDE.md)
List of files the instruction was applied to:
bin/copy_markdown_files.sh
`Dockerfile`: Docker setup uses Ruby 3.2 base image and installs build-essential...
Dockerfile: Docker setup uses Ruby 3.2 base image and installs build-essential and libffi-dev for native gem compilation
Docker container serves on all interfaces (0.0.0.0) for container access
📄 Source: CodeRabbit Inference Engine (CLAUDE.md)
List of files the instruction was applied to:
Dockerfile
`bin/merge_md_files.rb`: The 'bin/merge_md_files.rb' script combines all manual markdown files into single-page versions for both languages
bin/merge_md_files.rb: The 'bin/merge_md_files.rb' script combines all manual markdown files into single-page versions for both languages
📄 Source: CodeRabbit Inference Engine (CLAUDE.md)
List of files the instruction was applied to:
bin/merge_md_files.rb
🧠 Learnings (11)
📓 Common learnings
Learnt from: koriym
PR: ray-di/ray-di.github.io#0
File: :0-0
Timestamp: 2025-06-30T23:04:00.790Z
Learning: In the ray-di.github.io repository, files named `1page.md` (like `manuals/1.0/en/1page.md` and `manuals/1.0/ja/1page.md`) are generated files created by the `bin/merge_md_files.rb` script. These should not be reviewed for content issues. Instead, content reviews should focus on the original source markdown files located under the `manuals/` directory structure.
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/merge_md_files.rb : The 'bin/merge_md_files.rb' script combines all manual markdown files into single-page versions for both languages
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/ja/*.md : Japanese documentation files use 'layout: docs-ja' in their front matter
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/en/*.md : English documentation files use 'layout: docs-en', Japanese files use 'layout: docs-ja' in their front matter
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use descriptive names without numeric prefixes (e.g., 'installation.md', 'motivation.md')
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use Jekyll front matter with layout, title, category, and permalink
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : URLs for markdown files follow the pattern '/manuals/1.0/{lang}/{filename}.md' (AI-accessible) and '/manuals/1.0/{lang}/{filename}.html' (human-readable)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/copy_markdown_files.sh : Markdown files are manually copied to '_site' directory for direct access, supporting llms.txt standard for AI assistants
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Permalinks for documentation files follow the pattern '/manuals/1.0/{lang}/{filename}.html'
manuals/1.0/en/Installation.md (9)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use descriptive names without numeric prefixes (e.g., 'installation.md', 'motivation.md')
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use Jekyll front matter with layout, title, category, and permalink
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/en/*.md : English documentation files use 'layout: docs-en', Japanese files use 'layout: docs-ja' in their front matter
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/ja/*.md : Japanese documentation files use 'layout: docs-ja' in their front matter
Learnt from: koriym
PR: ray-di/ray-di.github.io#0
File: :0-0
Timestamp: 2025-06-30T23:04:00.790Z
Learning: In the ray-di.github.io repository, files named `1page.md` (like `manuals/1.0/en/1page.md` and `manuals/1.0/ja/1page.md`) are generated files created by the `bin/merge_md_files.rb` script. These should not be reviewed for content issues. Instead, content reviews should focus on the original source markdown files located under the `manuals/` directory structure.
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : URLs for markdown files follow the pattern '/manuals/1.0/{lang}/{filename}.md' (AI-accessible) and '/manuals/1.0/{lang}/{filename}.html' (human-readable)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/copy_markdown_files.sh : Markdown files are manually copied to '_site' directory for direct access, supporting llms.txt standard for AI assistants
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Permalinks for documentation files follow the pattern '/manuals/1.0/{lang}/{filename}.html'
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/merge_md_files.rb : The 'bin/merge_md_files.rb' script combines all manual markdown files into single-page versions for both languages
_includes/manuals/1.0/ja/contents.html (9)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Permalinks for documentation files follow the pattern '/manuals/1.0/{lang}/{filename}.html'
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : URLs for markdown files follow the pattern '/manuals/1.0/{lang}/{filename}.md' (AI-accessible) and '/manuals/1.0/{lang}/{filename}.html' (human-readable)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/ja/*.md : Japanese documentation files use 'layout: docs-ja' in their front matter
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use descriptive names without numeric prefixes (e.g., 'installation.md', 'motivation.md')
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use Jekyll front matter with layout, title, category, and permalink
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/en/*.md : English documentation files use 'layout: docs-en', Japanese files use 'layout: docs-ja' in their front matter
Learnt from: koriym
PR: ray-di/ray-di.github.io#0
File: :0-0
Timestamp: 2025-06-30T23:04:00.790Z
Learning: In the ray-di.github.io repository, files named `1page.md` (like `manuals/1.0/en/1page.md` and `manuals/1.0/ja/1page.md`) are generated files created by the `bin/merge_md_files.rb` script. These should not be reviewed for content issues. Instead, content reviews should focus on the original source markdown files located under the `manuals/` directory structure.
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to _layouts/docs-*.html : Table of contents generation for documentation pages
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/bp/*.md : Best practices files in 'bp/' subdirectory use descriptive hyphenated names
_includes/manuals/1.0/en/contents.html (7)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Permalinks for documentation files follow the pattern '/manuals/1.0/{lang}/{filename}.html'
Learnt from: koriym
PR: ray-di/ray-di.github.io#0
File: :0-0
Timestamp: 2025-06-30T23:04:00.790Z
Learning: In the ray-di.github.io repository, files named `1page.md` (like `manuals/1.0/en/1page.md` and `manuals/1.0/ja/1page.md`) are generated files created by the `bin/merge_md_files.rb` script. These should not be reviewed for content issues. Instead, content reviews should focus on the original source markdown files located under the `manuals/` directory structure.
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to _layouts/docs-*.html : Table of contents generation for documentation pages
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : URLs for markdown files follow the pattern '/manuals/1.0/{lang}/{filename}.md' (AI-accessible) and '/manuals/1.0/{lang}/{filename}.html' (human-readable)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use descriptive names without numeric prefixes (e.g., 'installation.md', 'motivation.md')
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use Jekyll front matter with layout, title, category, and permalink
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/en/*.md : English documentation files use 'layout: docs-en', Japanese files use 'layout: docs-ja' in their front matter
bin/entrypoint.sh (7)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/copy_markdown_files.sh : The 'bin/copy_markdown_files.sh' script copies all markdown files after Jekyll build to the '_site' directory for direct access
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/copy_markdown_files.sh : Markdown files are manually copied to '_site' directory for direct access, supporting llms.txt standard for AI assistants
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: If building manually without the scripts, run 'bundle exec jekyll build' followed by './bin/copy_markdown_files.sh'
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/serve_local.sh : Development scripts ('serve_local.sh' and Docker) automatically run the copy script after building the site
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/merge_md_files.rb : The 'bin/merge_md_files.rb' script combines all manual markdown files into single-page versions for both languages
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to _config.yml : Configured for GitHub Pages compatibility in Jekyll
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use Jekyll front matter with layout, title, category, and permalink
bin/copy_markdown_files.sh (12)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/copy_markdown_files.sh : Markdown files are manually copied to '_site' directory for direct access, supporting llms.txt standard for AI assistants
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/copy_markdown_files.sh : The 'bin/copy_markdown_files.sh' script copies all markdown files after Jekyll build to the '_site' directory for direct access
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: If building manually without the scripts, run 'bundle exec jekyll build' followed by './bin/copy_markdown_files.sh'
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/merge_md_files.rb : The 'bin/merge_md_files.rb' script combines all manual markdown files into single-page versions for both languages
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/serve_local.sh : Development scripts ('serve_local.sh' and Docker) automatically run the copy script after building the site
Learnt from: koriym
PR: ray-di/ray-di.github.io#0
File: :0-0
Timestamp: 2025-06-30T23:04:00.790Z
Learning: In the ray-di.github.io repository, files named `1page.md` (like `manuals/1.0/en/1page.md` and `manuals/1.0/ja/1page.md`) are generated files created by the `bin/merge_md_files.rb` script. These should not be reviewed for content issues. Instead, content reviews should focus on the original source markdown files located under the `manuals/` directory structure.
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use Jekyll front matter with layout, title, category, and permalink
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : URLs for markdown files follow the pattern '/manuals/1.0/{lang}/{filename}.md' (AI-accessible) and '/manuals/1.0/{lang}/{filename}.html' (human-readable)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/en/*.md : English documentation files use 'layout: docs-en', Japanese files use 'layout: docs-ja' in their front matter
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use descriptive names without numeric prefixes (e.g., 'installation.md', 'motivation.md')
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/ja/*.md : Japanese documentation files use 'layout: docs-ja' in their front matter
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to _config.yml : Configured for GitHub Pages compatibility in Jekyll
Dockerfile (8)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/copy_markdown_files.sh : The 'bin/copy_markdown_files.sh' script copies all markdown files after Jekyll build to the '_site' directory for direct access
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: If building manually without the scripts, run 'bundle exec jekyll build' followed by './bin/copy_markdown_files.sh'
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to Dockerfile : Docker setup uses Ruby 3.2 base image and installs build-essential and libffi-dev for native gem compilation
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/serve_local.sh : Development scripts ('serve_local.sh' and Docker) automatically run the copy script after building the site
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/copy_markdown_files.sh : Markdown files are manually copied to '_site' directory for direct access, supporting llms.txt standard for AI assistants
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to Dockerfile : Docker container serves on all interfaces (0.0.0.0) for container access
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to _config.yml : Configured for GitHub Pages compatibility in Jekyll
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/merge_md_files.rb : The 'bin/merge_md_files.rb' script combines all manual markdown files into single-page versions for both languages
manuals/1.0/ja/MentalModel.md (1)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use descriptive names without numeric prefixes (e.g., 'installation.md', 'motivation.md')
manuals/1.0/en/1page.md (2)
Learnt from: koriym
PR: ray-di/ray-di.github.io#0
File: :0-0
Timestamp: 2025-06-30T23:04:00.790Z
Learning: In the ray-di.github.io repository, files named `1page.md` (like `manuals/1.0/en/1page.md` and `manuals/1.0/ja/1page.md`) are generated files created by the `bin/merge_md_files.rb` script. These should not be reviewed for content issues. Instead, content reviews should focus on the original source markdown files located under the `manuals/` directory structure.
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use descriptive names without numeric prefixes (e.g., 'installation.md', 'motivation.md')
bin/merge_md_files.rb (12)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/merge_md_files.rb : The 'bin/merge_md_files.rb' script combines all manual markdown files into single-page versions for both languages
Learnt from: koriym
PR: ray-di/ray-di.github.io#0
File: :0-0
Timestamp: 2025-06-30T23:04:00.790Z
Learning: In the ray-di.github.io repository, files named `1page.md` (like `manuals/1.0/en/1page.md` and `manuals/1.0/ja/1page.md`) are generated files created by the `bin/merge_md_files.rb` script. These should not be reviewed for content issues. Instead, content reviews should focus on the original source markdown files located under the `manuals/` directory structure.
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use Jekyll front matter with layout, title, category, and permalink
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/copy_markdown_files.sh : Markdown files are manually copied to '_site' directory for direct access, supporting llms.txt standard for AI assistants
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/copy_markdown_files.sh : The 'bin/copy_markdown_files.sh' script copies all markdown files after Jekyll build to the '_site' directory for direct access
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/en/*.md : English documentation files use 'layout: docs-en', Japanese files use 'layout: docs-ja' in their front matter
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use descriptive names without numeric prefixes (e.g., 'installation.md', 'motivation.md')
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : URLs for markdown files follow the pattern '/manuals/1.0/{lang}/{filename}.md' (AI-accessible) and '/manuals/1.0/{lang}/{filename}.html' (human-readable)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/ja/*.md : Japanese documentation files use 'layout: docs-ja' in their front matter
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to _layouts/docs-*.html : Table of contents generation for documentation pages
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Permalinks for documentation files follow the pattern '/manuals/1.0/{lang}/{filename}.html'
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: If building manually without the scripts, run 'bundle exec jekyll build' followed by './bin/copy_markdown_files.sh'
Gemfile (7)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to _config.yml : Uses Kramdown markdown processor with Rouge syntax highlighter for Jekyll
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to _config.yml : Configured for GitHub Pages compatibility in Jekyll
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to Dockerfile : Docker setup uses Ruby 3.2 base image and installs build-essential and libffi-dev for native gem compilation
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: If building manually without the scripts, run 'bundle exec jekyll build' followed by './bin/copy_markdown_files.sh'
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/copy_markdown_files.sh : The 'bin/copy_markdown_files.sh' script copies all markdown files after Jekyll build to the '_site' directory for direct access
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to _config.yml : The development server runs on port 4000
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/merge_md_files.rb : The 'bin/merge_md_files.rb' script combines all manual markdown files into single-page versions for both languages
🪛 markdownlint-cli2 (0.17.2)
manuals/1.0/en/ConstructorBindings.md
61-61: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
manuals/1.0/en/1page.md
353-353: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
353-353: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
518-518: Link and image reference definitions should be needed
Unused link or image reference definition: "injector"
(MD053, link-image-reference-definitions)
611-611: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
611-611: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
667-667: Hard tabs
Column: 5
(MD010, no-hard-tabs)
933-933: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
933-933: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
933-933: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1114-1114: Bare URL used
(MD034, no-bare-urls)
1123-1123: Hard tabs
Column: 1
(MD010, no-hard-tabs)
1232-1232: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1232-1232: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1266-1266: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1270-1270: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1277-1277: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
1279-1279: Hard tabs
Column: 1
(MD010, no-hard-tabs)
1280-1280: Hard tabs
Column: 1
(MD010, no-hard-tabs)
1287-1287: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1293-1293: Hard tabs
Column: 1
(MD010, no-hard-tabs)
1294-1294: Hard tabs
Column: 1
(MD010, no-hard-tabs)
1298-1298: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1332-1332: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1332-1332: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1332-1332: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1358-1358: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1358-1358: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1358-1358: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1471-1471: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1474-1474: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1652-1652: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1652-1652: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1652-1652: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1694-1694: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1694-1694: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1848-1848: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1848-1848: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1894-1894: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1894-1894: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1894-1894: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1896-1896: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1896-1896: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
2081-2081: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
2082-2082: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
2083-2083: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
2086-2086: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
2087-2087: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
2374-2374: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
2374-2374: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
2646-2646: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
2646-2646: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
🪛 LanguageTool
manuals/1.0/en/1page.md
[uncategorized] ~10-~10: The preposition “on” seems more likely in this position than the preposition “in”.
Context: ...anual contains all Ray.Di documentation in a single page for easy reference, print...
(AI_EN_LECTOR_REPLACEMENT_PREPOSITION_IN_ON)
[uncategorized] ~26-~26: This verb may not be in the correct tense. Consider changing the tense to fit the context better.
Context: ...s how to install Ray.Di from source and run the unit tests and demos. ```bash git ...
(AI_EN_LECTOR_REPLACEMENT_VERB_TENSE)
[grammar] ~273-~273: The word “lookup” is a noun. The verb is spelled with a space.
Context: ...the clients of BillingService need to lookup its dependencies. We can fix some of th...
(NOUN_VERB_CONFUSION)
[uncategorized] ~276-~276: A comma may be missing after the conjunctive/linking adverb ‘Otherwise’.
Context: ...asses, it's useful to have a framework. Otherwise you'll need to construct dependencies r...
(SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA)
[style] ~277-~277: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...truct dependencies recursively when you need to use a service: ```php <?php $processor...
(REP_NEED_TO_VB)
[style] ~290-~290: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...Ray.Di in our billing example, we first need to tell it how to map our interfaces to th...
(REP_NEED_TO_VB)
[style] ~336-~336: Consider simply using “of” instead.
Context: ...njector` can be used to get an instance of any of the bound classes. ```php <?php $injec...
(OF_ANY_OF)
[uncategorized] ~380-~380: You might be missing the article “the” here.
Context: ...estable or inflexible code, you can use dependency injection pattern to address all these ...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[uncategorized] ~398-~398: Possible missing comma found.
Context: ...s above can be used with any Database objects since Foo has no knowledge of how the...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~429-~429: Possible missing comma found.
Context: ...class's constructor arguments are its dependencies and applications useModule` to tell R...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~438-~438: You might be missing the article “the” here.
Context: ...ures all the necessary dependencies for Greeter class: ```php class CountProvi...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[uncategorized] ~471-~471: Possible missing article found.
Context: ...e complicated and Ray.Di makes creating complex object easy by creating all the [transi...
(AI_HYDRA_LEO_MISSING_A)
[uncategorized] ~475-~475: This verb does not appear to agree with the subject. Consider using a different form.
Context: ...example, a web server script might that looks like this: ```php final class MyWebSer...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[formatting] ~598-~598: Consider inserting a comma after addressing someone.
Context: ...cted a small dependency graph using Ray.Di that is capable of building instances o...
(SENT_START_NNP_COMMA)
[uncategorized] ~647-~647: Possible missing comma found.
Context: ...ed.md) declares two dependencies in its constructor and those dependencies are represented ...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~681-~681: Possible missing comma found.
Context: ...dencies that are of the same type, that is to make the type more specific: ```php...
(AI_HYDRA_LEO_MISSING_COMMA)
[formatting] ~693-~693: Consider inserting a comma here, unless the first half is essential to the meaning of the sentence.
Context: ...ting ) {} } `Key` with binding attribute can be created as: php $englishGree...
(WITH_THAT_COMMA)
[uncategorized] ~735-~735: You might be missing the article “the” here.
Context: ...he. Most applications do not implement Provider interface directly, they use `...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[uncategorized] ~737-~737: The grammatical number of this noun doesn’t look right. Consider replacing it.
Context: ...ernally creates Providers for all the object it knows how to create. For example, t...
(AI_EN_LECTOR_REPLACEMENT_NOUN_NUMBER)
[uncategorized] ~788-~788: When ‘Domain-Specific’ is used as a modifier, it is usually spelled with a hyphen.
Context: ... ways to do this: * Using the Ray.Di Domain Specific Language (DSL). Conceptually, these AP...
(SPECIFIC_HYPHEN)
[style] ~854-~854: Consider a more concise word here.
Context: ... the dependencies. You can imagine that in order to inject an instance of Foo as shown ab...
(IN_ORDER_TO_PREMIUM)
[uncategorized] ~909-~909: A punctuation mark might be missing here.
Context: ...ore. ## What's next? Learn how to use Scopes to manage the life...
(AI_EN_LECTOR_MISSING_PUNCTUATION)
[style] ~910-~910: ‘many different ways’ might be wordy. Consider a shorter alternative.
Context: ...le of objects created by Ray.Di and the many different ways to [add entries into the Ray.Di map](bi...
(EN_WORDINESS_PREMIUM_MANY_DIFFERENT_WAYS)
[grammar] ~935-~935: The singular proper name ‘Di’ must be used with a third-person or a past tense verb.
Context: ...l). You add new entries into the Ray.Di map by creating bindings. ## Creating Bind...
(HE_VERB_AGR)
[uncategorized] ~939-~939: Possible missing comma found.
Context: ...ding. These methods are type checked in compile can report errors if you use the wrong ...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~958-~958: A comma might be missing here.
Context: ...ndings In addition to the bindings you specify the injector includes [built-in binding...
(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)
[uncategorized] ~958-~958: Possible missing comma found.
Context: ... When a dependency is requested but not found it attempts to create a just-in-time bi...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~964-~964: Possible missing comma found.
Context: ...more bindings. * Earlier bindings have priority even if the same binding is made later....
(AI_HYDRA_LEO_MISSING_COMMA)
[typographical] ~990-~990: Consider adding a comma after ‘Occasionally’ for more clarity.
Context: ...ass); ``` *** ## Binding Attributes Occasionally you'll want multiple bindings for a sam...
(RB_LY_COMMA)
[uncategorized] ~1014-~1014: A determiner appears to be missing. Consider inserting it.
Context: ... specify parameter name with qualifier. Qualifier applied all parameters without it. ```...
(AI_EN_LECTOR_MISSING_DETERMINER)
[uncategorized] ~1020-~1020: A comma might be missing here.
Context: ...rdProcessorInterface $processor ){} ``` Lastly we create a binding that uses the attri...
(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)
[style] ~1030-~1030: Consider a more concise word here.
Context: ...``` ### Binding Attributes in Setters In order to make your custom Qualifier attribute ...
(IN_ORDER_TO_PREMIUM)
[style] ~1053-~1053: Consider shortening this phrase to just ‘whether’, unless you mean ‘regardless of whether’.
Context: ...)` method. It will be used to determine whether or not the injection should be performed based...
(WHETHER)
[style] ~1074-~1074: Consider a more concise word here.
Context: ...ion supplied in the qualifier attribute in order to instantiate the most appropriate class....
(IN_ORDER_TO_PREMIUM)
[style] ~1080-~1080: Consider a more concise word here.
Context: ..., the label can be used in the bindings in order to select the right class to be instantiat...
(IN_ORDER_TO_PREMIUM)
[style] ~1100-~1100: Consider a more concise word here.
Context: ...ou need to put the #[Named] attribuet in order to specify the parameter. ```php use Ray...
(IN_ORDER_TO_PREMIUM)
[typographical] ~1188-~1188: Consider adding a comma after ‘Finally’ for more clarity.
Context: ... return $transactionLog; } } ``` Finally we bind to the provider using the `toPr...
(RB_LY_COMMA)
[uncategorized] ~1218-~1218: You might be missing the article “the” here.
Context: ... `InjectionPointInterface` provides following methods. php $ip->getClass(); ...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[uncategorized] ~1246-~1246: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ructor or setter method because it is a third party class, Or you simply don't like to use ...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
[uncategorized] ~1246-~1246: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... use annotations. Constructor Binding provide the solution to this problem. By callin...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[typographical] ~1339-~1339: It appears that a comma is missing.
Context: ...pe you need until runtime. In this rare case you should inject the injector. Code th...
(DURING_THAT_TIME_COMMA)
[uncategorized] ~1345-~1345: Possible missing preposition found.
Context: ...paringly. ## Providers For every type Ray.Di knows about, it can also inject a Pr...
(AI_HYDRA_LEO_MISSING_OF)
[grammar] ~1372-~1372: The verb “write” needs to be in the to-infinitive form.
Context: ...e plugin consumer nor the plugin author need write much setup code for extensible applicat...
(MISSING_TO_BEFORE_A_VERB)
[typographical] ~1475-~1475: Consider adding a comma after ‘Finally’ for more clarity.
Context: ...set only if one is not already bound._ Finally we must register the plugins themselves...
(RB_LY_COMMA)
[uncategorized] ~1661-~1661: You might be missing the article “the” here.
Context: ...rameters to properties. You do not need #[Inject] attribute in constructor. ``...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[typographical] ~1728-~1728: Consider adding a comma after ‘Occasionally’ for more clarity.
Context: ...lly necessary. ## Optional Injections Occasionally it's convenient to use a dependency whe...
(RB_LY_COMMA)
[grammar] ~1801-~1801: The plural noun “details” cannot be used with the article “a”. Did you mean “a detail” or “details”?
Context: ...r application saves a summary entry and a details when a pizza charge fails. With provide...
(A_NNS)
[misspelling] ~1896-~1896: This expression is normally spelled as one or with a hyphen.
Context: ...ing_ method is invoked. It's suited for cross cutting concerns ("aspects"), such as transacti...
(EN_COMPOUNDS_CROSS_CUTTING)
[uncategorized] ~1896-~1896: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ather than objects, their use is called Aspect Oriented Programming (AOP). [Matcher](https://g...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
[style] ~1905-~1905: The word ‘thru’ is informal. Consider replacing it with “through”.
Context: ...nds. The delivery guys only work Monday thru Friday so we'll prevent pizza from bein...
(THRU)
[uncategorized] ~1905-~1905: A comma might be missing here.
Context: ...The delivery guys only work Monday thru Friday so we'll prevent pizza from being order...
(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)
[uncategorized] ~1905-~1905: You might be missing the article “the” here.
Context: ...This example is structurally similar to use of AOP for authorization. To mark sele...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[formatting] ~1948-~1948: Consider inserting a comma after an introductory phrase for better readability.
Context: ... ``` Finally, we configure everything. In this case we match any class, but only the method...
(IN_THAT_CASE_COMMA)
[uncategorized] ~1976-~1976: Use a comma before “and” if it connects two independent clauses (unless they are closely connected and short).
Context: ...urday), we see the method is intercepted and our order is rejected: ```php RuntimeE...
(COMMA_COMPOUND_SENTENCE_2)
[uncategorized] ~2018-~2018: Possible missing article found.
Context: ...tor API implemented by Ray.Di is mostly same as a public specification called [AOP ...
(AI_HYDRA_LEO_MISSING_THE)
[misspelling] ~2031-~2031: Did you mean “side effect” (=adverse effect, unintended consequence)? Open compounds are not hyphenated.
Context: ...e.html) * [Modules should be fast and side-effect free](bp/modules_should_be_fast_and_sid...
(AFFECT_EFFECT)
[uncategorized] ~2045-~2045: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...GraphViz](http://www.graphviz.org/), an open source graph visualization package. It cleanly...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
[style] ~2150-~2150: As a shorter alternative for ‘able to’, consider using “can”.
Context: ...velopment and production. The injector is able to inject singleton objects **beyond the r...
(BE_ABLE_TO)
[typographical] ~2185-~2185: It seems that a comma is missing after this introductory phrase.
Context: ...y.Di 2.0 was first released in 2015 and since then we've been supporting the latest PHP an...
(SINCE_THEN_COMMA)
[misspelling] ~2239-~2239: Did you mean “side effects” (=adverse effect, unintended consequence)? Open compounds are not hyphenated.
Context: .... Your tests should be fast and free of side-effects. But non-constant values held by static...
(AFFECT_EFFECT)
[uncategorized] ~2254-~2254: A comma might be missing here.
Context: ...s? Say that your application has a few classes including a Store, a Boss, and a `C...
(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)
[style] ~2282-~2282: For conciseness, consider replacing this expression with an adverb.
Context: ... { // Nothing interesting here } ``` Right now, the dependency chain is all good: cons...
(AT_THE_MOMENT)
[grammar] ~2286-~2286: The plural determiner ‘those’ does not agree with the singular noun ‘customer’.
Context: ... need a reference to the Store to get those customer: ```java public class Store { privat...
(THIS_NNS)
[uncategorized] ~2331-~2331: Possible missing preposition found.
Context: ...Dependency Case into a separate class. Take the above Store example, the work of ...
(AI_HYDRA_LEO_MISSING_TO)
[uncategorized] ~2392-~2392: A punctuation mark might be missing here.
Context: ...here, that unless Store is bound as a Singleton or in some...
(AI_EN_LECTOR_MISSING_PUNCTUATION)
[style] ~2394-~2394: Consider making your message more concise.
Context: ...e reused, the shopProvider.get() call will end up constructing a new Store, which will construct a n...
(DO_END_UP_VBG)
[style] ~2460-~2460: As an alternative to the over-used intensifier ‘quite’, consider replacing this phrase.
Context: ...AssistedInject](AssistedInject) is also quite good for such cases. ## Circular proxy feat...
(EN_WEAK_ADJECTIVE)
[uncategorized] ~2518-~2518: Although a hyphen is possible, it is not necessary in a compound modifier in which the first word is an adverb that ends in ‘ly’.
Context: ... of course, it makes sense to bind some highly-related bindings with the same attributes. E.g....
(HYPHENATED_LY_ADVERB_ADJECTIVE)
[grammar] ~2520-~2520: Do not use the singular ‘a’ before the plural noun ‘attributes’.
Context: ...ng. And you should definitely not reuse a binding attributes for unrelated bindings. When in doub...
(VB_A_JJ_NNS)
[style] ~2549-~2549: To make your writing clearer, consider a more direct alternative.
Context: ...encies Avoid injecting an object only as a means to get at another object. For example, don't i...
(AS_A_MEANS_TO)
[style] ~2549-~2549: To make your writing clearer, consider a more direct alternative.
Context: ... For example, don't inject a Customer as a means to get at an Account: ```php class ShowBudg...
(AS_A_MEANS_TO)
[misspelling] ~2641-~2641: Did you mean “side effect” (=adverse effect, unintended consequence)? Open compounds are not hyphenated.
Context: ...ay.Di. ### Modules should be fast and side-effect free Rather than using an external XM...
(AFFECT_EFFECT)
[style] ~2650-~2650: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...icult to write unit tests for it. * Modules can be overridden. Ray.Di modules sup...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[uncategorized] ~2652-~2652: Possible missing comma found.
Context: ...the proper level of abstraction. In our applications we use this interface: ```php interfac...
(AI_HYDRA_LEO_MISSING_COMMA)
[typographical] ~2695-~2695: Consider adding a comma after ‘Ideally’ for more clarity.
Context: ...ss type Group bindings into features. Ideally it should be possible to enable/disable...
(RB_LY_COMMA)
🪛 RuboCop (1.75.5)
bin/merge_md_files.rb
[convention] 32-42: Redundant assignment before returning detected.
(Style/RedundantAssignment)
[convention] 137-171: Assignment Branch Condition size for process_best_practices is too high. [<11, 22, 6> 25.32/23]
(Metrics/AbcSize)
🔇 Additional comments (24)
manuals/1.0/en/ProviderBindings.md (1)
24-24: Typo fixed – looks good.
The correction from “contructor” → “constructor” improves readability.manuals/1.0/ja/ObjectLifeCycle.md (1)
9-9: Attribute notation corrected – OK.
Switching to#[PostConstruct]aligns with PHP8 syntax.manuals/1.0/en/Motivation.md (3)
55-55: Good catch – static helper call fixedThe replacement with
Receipt::forSystemFailure()removes the typo introduced earlier.
No further issues here.
220-223: Initialisation snippet looks correctAll test fixtures are now created via
$this->…properties; alignment with the assertions below is OK.
230-234: Assertions now reference the updated fixturesThe use of
$this->creditCardand$this->processormatches the setup block. 👍manuals/1.0/en/Multibindings.md (1)
136-145: Cleaner module installation – nice refactorWrapping the installed modules in an anonymous
AbstractModulekeeps the injector call concise. No issues found.manuals/1.0/ja/Motivation.md (5)
48-48: Static-helper typo fixed
Receipt::forSystemFailure()call now compiles. 👍
122-122: Correct instance passed to factory
TransactionLogFactory::setInstance($this->transactionLog);eliminates the undefined-variable bug. Good.
163-168: Variable reference corrected but still one stray$resultlaterInside this changed block everything looks correct, but note that a few lines below (unchanged) you still log
resultwithout the$. Consider fixing that in a follow-up.
194-197: Fixture setup aligns with assertionsProperties are initialised consistently; no issues found.
204-204: Assertion now targets the right propertyUsing
$this->creditCardinstead of the unscoped variable clears the error. 👍manuals/1.0/en/Bindings.md (1)
25-25: LGTM – correct class-string syntaxAdding
::classmakes the example valid PHP and aligns with the surrounding code..claude/settings.local.json (1)
1-12: Wildcard-allowing every argument is riskyGranting
Bash(<cmd>:*)permits arbitrary arguments, which can unintentionally open the door to destructive flags (e.g.,rm -rf,--preserve-root=false).
Double-check that each command truly needs unrestricted args, or tighten them to the minimal patterns actually required.Dockerfile (1)
13-27: Verify site source is copied before switching to non-root userOnly the scripts are copied before
USER jekyll.
If the actual site source getsCOPY-ed later (after this snippet) you’re fine; if not, the container will start with an empty/appapart from Gemfiles &bin/.
Please confirm the fullDockerfilestill copies the content tree after the user switch, otherwise the site won’t render.manuals/1.0/ja/MentalModel.md (2)
111-118: LGTM – provider example now uses the correct class name
CountProvidertypo fixed; example compiles.
131-133: LGTM – bindings updated to the fixed provider namesBindings now reference
CountProvider/MessageProvider; sample is coherent.Gemfile (1)
20-27: Confirm plugin-version compatibility with Jekyll 4.4Upgrading to Jekyll 4.4.1 is fine but
jekyll-feed 0.17andkramdown-parser-gfm 1.1have not yet released official compatibility statements. Please run a localbundle exec jekyll buildto ensure there are no resolver or runtime warnings.If issues arise, pin the versions that GitHub Pages currently ships with (see https://github.com/github/pages-gem).
manuals/1.0/ja/GettingStarted.md (2)
134-137: LGTM! Fixed typo inreadonlykeyword.The
readonlykeyword is now correctly spelled for all four constructor properties.
149-157: LGTM! Consistent module installation pattern.The Injector instantiation now uses an anonymous class extending
AbstractModulewith modules installed via theinstall()method, which is consistent with the pattern used throughout the documentation.manuals/1.0/ja/Multibindings.md (3)
79-80: LGTM! Fixed attribute annotation and parameter separator.
- Correctly uses
UriSummarizerInterface::classin the#[Set]attribute- Fixed the parameter separator from semicolon to comma
117-126: LGTM! Consistent injector instantiation pattern.The code now uses an anonymous class extending
AbstractModulethat installs modules, consistent with the pattern used in other documentation files.
165-165: LGTM! Fixed method declaration and variable names.
- Added the missing
functionkeyword to the method declaration- Corrected the variable name from
$filickerSummarizerto$flickrSummarizer- Fixed the map key from 'flicker' to 'flickr'
Also applies to: 167-168
bin/merge_md_files.rb (2)
47-51: Good improvement to handle corrupted frontmatter patterns.The regex now handles edge cases like "1---" patterns that could appear in corrupted files.
53-170: Excellent modularization and error handling improvements!The refactoring into smaller private methods (
determine_file_order,write_header,process_main_files,process_best_practices) makes the code much more maintainable and testable. The console output helps track progress and diagnose issues.
- Use find -print0 and read -r -d '' for safe handling of special characters - Properly handle filenames containing spaces, tabs, or newlines - Add IFS= to prevent whitespace trimming - Ensure script works correctly with all valid Unix filenames 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
…tion - Fix $UriBinder to $uriBinder in English version for consistency - Fix missing 'to' method call in Japanese version syntax - Ensure variable naming consistency throughout examples - Regenerate 1page.md files with corrections 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
- Collapse file ordering and processing into a single streamlined flow - Remove unnecessary helper methods (determine_file_order, process_main_files, process_best_practices) - Use Pathname for modern Ruby file operations - Maintain all existing functionality including error handling and logging - Simplify logic while preserving file count tracking and BP section header 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@sourcery-ai review |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey @koriym - I've reviewed your changes and found some issues that need to be addressed.
Blocking issues:
- Missing 'function' keyword in static method declaration. (link)
- Missing '$this->' in echo statement inside loop. (link)
- Syntax error in foreach statement. (link)
- Missing 'function' keyword in method declaration. (link)
Prompt for AI Agents
Please address the comments from this code review:
## Individual Comments
### Comment 1
<location> `manuals/1.0/ja/1page.md:94` </location>
<code_context>
+{
+ private static CreditCardProcessor $instance;
+
+ public static setInstance(CreditCardProcessor $processor): void
+ {
+ self::$instance = $processor;
</code_context>
<issue_to_address>
Missing 'function' keyword in static method declaration.
In 'CreditCardProcessorFactory', update 'setInstance' to 'public static function setInstance(...)' to fix the syntax error.
</issue_to_address>
### Comment 2
<location> `manuals/1.0/ja/1page.md:167` </location>
<code_context>
+
+ $this->assertTrue($receipt->hasSuccessfulCharge());
+ $this->assertEquals(100, $receipt->getAmountOfCharge());
+ $this->assertEquals($creditCard, $processor->getCardOfOnlyCharge());
+ $this->assertEquals(100, $processor->getAmountOfOnlyCharge());
+ $this->assertTrue($this->transactionLog->wasSuccessLogged());
</code_context>
<issue_to_address>
Undefined variables in test assertions.
Use '$this->creditCard' and '$this->processor' instead of '$creditCard' and '$processor' to reference the correct class properties in your assertions.
</issue_to_address>
### Comment 3
<location> `manuals/1.0/ja/1page.md:380` </location>
<code_context>
+
+ public function sayHello(): void
+ {
+ for ($i=0; $i < $this->count; $i++) {
+ echo $message;
+ }
</code_context>
<issue_to_address>
Missing '$this->' in echo statement inside loop.
Use '$this->message' instead of '$message' to reference the class property.
</issue_to_address>
### Comment 4
<location> `manuals/1.0/ja/1page.md:1276` </location>
<code_context>
+class FlickrPhotoSummarizer implements UriSummarizer
+{
+ public function __construct(
+ private readonly PhotoPaternMatcherInterface $matcher
+ ) {}
+
</code_context>
<issue_to_address>
Typo in interface name: 'PhotoPaternMatcherInterface' should be 'PhotoPatternMatcherInterface'.
Update the interface name to 'PhotoPatternMatcherInterface'.
</issue_to_address>
<suggested_fix>
<<<<<<< SEARCH
class FlickrPhotoSummarizer implements UriSummarizer
{
public function __construct(
+ private readonly PhotoPaternMatcherInterface $matcher
+ ) {}
=======
class FlickrPhotoSummarizer implements UriSummarizer
{
public function __construct(
+ private readonly PhotoPatternMatcherInterface $matcher
+ ) {}
>>>>>>> REPLACE
</suggested_fix>
### Comment 5
<location> `manuals/1.0/ja/1page.md:1330` </location>
<code_context>
+ public function prettifyUri(Uri $uri): string
+ {
+ // 実装をループし、このURIをサポートするものを探します
+ for ($this->summarizer as summarizer) {
+ $summary = $summarizer->summarize($uri);
+ if ($summary != null) {
</code_context>
<issue_to_address>
Syntax error in foreach statement.
Use 'foreach ($this->summarizers as $summarizer) {' instead.
</issue_to_address>
### Comment 6
<location> `manuals/1.0/ja/1page.md:1679` </location>
<code_context>
+ #[Set(TransactionLogInterface::class)] private readonly ProviderInterface $logFileProvider
+ ) {}
+
+ public logChargeResult(ChargeResult $result): void {
+ $summaryEntry = $this->logFileProvider->get();
+ $summaryEntry->setText("Charge " + (result.wasSuccessful() ? "success" : "failure"));
</code_context>
<issue_to_address>
Missing 'function' keyword in method declaration.
Declare the method as 'public function logChargeResult(ChargeResult $result): void {'.
</issue_to_address>
### Comment 7
<location> `bin/merge_md_files.rb:24` </location>
<code_context>
+ markdown_files
end
-def generate_combined_file(language, intro_message)
- source_folder = File.expand_path("../manuals/1.0/#{language}/", __dir__)
- output_file = "manuals/1.0/#{language}/1page.md"
</code_context>
<issue_to_address>
Consider refactoring by extracting file ordering and section rendering into separate methods to simplify generate_combined_file.
Here are a few quick wins to collapse deep nesting and custom‐case logic without losing any behavior:
1. Pull “gather & sort” into its own method
2. Pull “render one section” into its own method
3. Keep only a single `each_with_index` loop in `generate_combined_file`
```ruby
# 1) build and sort the list in one spot
def ordered_docs(source, language)
nav = extract_order_from_contents(language) # may be nil
glob = source.join("**/*.md")
.glob
.reject { |p| %w[1page.md ai-assistant.md].include?(p.basename.to_s) }
glob.sort_by do |path|
if nav && i = nav.index(path.basename.to_s)
i
else
extract_order(path) # fallback to frontmatter/filename
end
end
end
# 2) render a single doc (normal vs. bp)
def render_section(out, path, idx, bp_index)
raw = strip_frontmatter(path.read).strip
return if raw.empty?
out.write "\n***\n\n" if idx > 0
out.write "## Best Practices Details\n\n" if idx == bp_index
if path.dirname.basename.to_s == "bp"
title, body = raw.match(/\A\#{1,6}\s+(.+?)\n(.*)/m)&.captures || [
path.basename(".*").to_s.gsub(/([A-Z])/, ' \1').strip, raw
]
out.write "### #{title}\n\n#{body}\n"
else
out.write raw + "\n"
end
end
```
Then your `generate_combined_file` collapses to:
```ruby
def generate_combined_file(language, intro)
source = Pathname(__dir__)/"../manuals/1.0/#{language}"
output = source/"1page.md"
files = ordered_docs(source, language)
bp_index = files.index { |p| p.dirname.basename.to_s == "bp" } || files.size
File.open(output, "w") do |out|
out.write <<~YAML_HEADER
---
layout: docs-#{language}
…etc…
---
YAML_HEADER
files.each_with_index do |path, idx|
render_section(out, path, idx, bp_index)
end
end
end
```
This reduces the nesting, removes ad-hoc inline logic, and keeps exactly the same behavior.
</issue_to_address>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
…documentation - Remove $linkableSections restriction to process ALL sections with markdown links - Fix link description extraction to remove markdown syntax from table of contents - Now includes all 26 documentation files instead of just 4 (Getting Started + Best Practices) - File size increased from ~31K to ~79K characters for complete coverage - llms-full.txt now serves its intended purpose as comprehensive AI-friendly documentation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
There was a problem hiding this 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
🔭 Outside diff range comments (2)
manuals/1.0/en/InjectingProviders.md (2)
42-46: Missingfunctionkeyword breaks the example
public chargeOrder(...)is invalid PHP; the method must be declared withfunction.- public chargeOrder(PizzaOrder $order, CreditCard $creditCard): Receipt + public function chargeOrder( + PizzaOrder $order, + CreditCard $creditCard + ): Receipt
67-75: String concatenation and member access use Java/JS syntax, not PHP
The example won’t run as-is:
- PHP concatenation operator is
.not+.- Method calls need
->, and$resultmust be a variable.- $summaryEntry->setText("Charge " + (result.wasSuccessful() ? "success" : "failure")); + $summaryEntry->setText( + 'Charge ' . ($result->wasSuccessful() ? 'success' : 'failure') + ); - $detailEntry->setText("Failure result: " + result); + $detailEntry->setText('Failure result: ' . $result);Consider quickly lint-running the snippets before publishing to avoid these slips.
♻️ Duplicate comments (2)
bin/merge_md_files.rb (1)
54-139: Consider addressing the high complexity of generate_combined_file.While the functionality is correct, this method has high cyclomatic complexity (18/7) and ABC size (65.52/23) as flagged by static analysis. The existing sourcery-ai suggestions provide good approaches to reduce complexity by extracting file ordering and section rendering into separate methods.
The current implementation works correctly, but consider the refactoring suggestions from previous reviews to improve maintainability.
llms-full.txt (1)
855-858: Syntax error – stray closing parenthesis in example code
$databaseProvider = $map[Database::class]);still contains an unmatched)and will not parse.- $databaseProvider = $map[Database::class]); + $databaseProvider = $map[Database::class];Readers copying this snippet will hit a fatal error.
🧹 Nitpick comments (1)
bin/merge_md_files.rb (1)
33-43: Address the redundant assignment flagged by RuboCop.The static analysis correctly identifies that the
markdown_filesvariable assignment before return is redundant.- # Convert HTML filenames to markdown filenames - markdown_files = permalinks.map do |permalink| + # Convert HTML filenames to markdown filenames + permalinks.map do |permalink| # Remove .html extension base = permalink.sub('.html', '') # Skip AI assistant and other non-documentation pages skip_pages = ['ai-assistant', 'index', '1page'] next nil if skip_pages.include?(base) # Convert kebab-case to CamelCase convert_to_markdown_filename(base) end.compact - - markdown_files
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (8)
bin/generate_llms_full.php(2 hunks)bin/merge_md_files.rb(1 hunks)llms-full.txt(5 hunks)manuals/1.0/en/1page.md(1 hunks)manuals/1.0/en/InjectingProviders.md(1 hunks)manuals/1.0/en/Multibindings.md(5 hunks)manuals/1.0/ja/InjectingProviders.md(3 hunks)manuals/1.0/ja/Multibindings.md(4 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
- manuals/1.0/en/Multibindings.md
- manuals/1.0/ja/InjectingProviders.md
- manuals/1.0/ja/Multibindings.md
🧰 Additional context used
📓 Path-based instructions (3)
`manuals/1.0/{en,ja}/*.md`: Documentation files use descriptive names without nu...
manuals/1.0/{en,ja}/*.md: Documentation files use descriptive names without numeric prefixes (e.g., 'installation.md', 'motivation.md')
Documentation files use Jekyll front matter with layout, title, category, and permalink
Permalinks for documentation files follow the pattern '/manuals/1.0/{lang}/{filename}.html'
URLs for markdown files follow the pattern '/manuals/1.0/{lang}/{filename}.md' (AI-accessible) and '/manuals/1.0/{lang}/{filename}.html' (human-readable)
📄 Source: CodeRabbit Inference Engine (CLAUDE.md)
List of files the instruction was applied to:
manuals/1.0/en/InjectingProviders.mdmanuals/1.0/en/1page.md
`manuals/1.0/en/*.md`: English documentation files use 'layout: docs-en', Japanese files use 'layout: docs-ja' in their front matter
manuals/1.0/en/*.md: English documentation files use 'layout: docs-en', Japanese files use 'layout: docs-ja' in their front matter
📄 Source: CodeRabbit Inference Engine (CLAUDE.md)
List of files the instruction was applied to:
manuals/1.0/en/InjectingProviders.mdmanuals/1.0/en/1page.md
`bin/merge_md_files.rb`: The 'bin/merge_md_files.rb' script combines all manual markdown files into single-page versions for both languages
bin/merge_md_files.rb: The 'bin/merge_md_files.rb' script combines all manual markdown files into single-page versions for both languages
📄 Source: CodeRabbit Inference Engine (CLAUDE.md)
List of files the instruction was applied to:
bin/merge_md_files.rb
🧠 Learnings (4)
📓 Common learnings
Learnt from: koriym
PR: ray-di/ray-di.github.io#0
File: :0-0
Timestamp: 2025-06-30T23:04:00.790Z
Learning: In the ray-di.github.io repository, files named `1page.md` (like `manuals/1.0/en/1page.md` and `manuals/1.0/ja/1page.md`) are generated files created by the `bin/merge_md_files.rb` script. These should not be reviewed for content issues. Instead, content reviews should focus on the original source markdown files located under the `manuals/` directory structure.
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/merge_md_files.rb : The 'bin/merge_md_files.rb' script combines all manual markdown files into single-page versions for both languages
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/ja/*.md : Japanese documentation files use 'layout: docs-ja' in their front matter
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/en/*.md : English documentation files use 'layout: docs-en', Japanese files use 'layout: docs-ja' in their front matter
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use descriptive names without numeric prefixes (e.g., 'installation.md', 'motivation.md')
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use Jekyll front matter with layout, title, category, and permalink
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : URLs for markdown files follow the pattern '/manuals/1.0/{lang}/{filename}.md' (AI-accessible) and '/manuals/1.0/{lang}/{filename}.html' (human-readable)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/copy_markdown_files.sh : Markdown files are manually copied to '_site' directory for direct access, supporting llms.txt standard for AI assistants
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Permalinks for documentation files follow the pattern '/manuals/1.0/{lang}/{filename}.html'
bin/generate_llms_full.php (1)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/copy_markdown_files.sh : Markdown files are manually copied to '_site' directory for direct access, supporting llms.txt standard for AI assistants
manuals/1.0/en/1page.md (2)
Learnt from: koriym
PR: ray-di/ray-di.github.io#0
File: :0-0
Timestamp: 2025-06-30T23:04:00.790Z
Learning: In the ray-di.github.io repository, files named `1page.md` (like `manuals/1.0/en/1page.md` and `manuals/1.0/ja/1page.md`) are generated files created by the `bin/merge_md_files.rb` script. These should not be reviewed for content issues. Instead, content reviews should focus on the original source markdown files located under the `manuals/` directory structure.
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use descriptive names without numeric prefixes (e.g., 'installation.md', 'motivation.md')
bin/merge_md_files.rb (13)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/merge_md_files.rb : The 'bin/merge_md_files.rb' script combines all manual markdown files into single-page versions for both languages
Learnt from: koriym
PR: ray-di/ray-di.github.io#0
File: :0-0
Timestamp: 2025-06-30T23:04:00.790Z
Learning: In the ray-di.github.io repository, files named `1page.md` (like `manuals/1.0/en/1page.md` and `manuals/1.0/ja/1page.md`) are generated files created by the `bin/merge_md_files.rb` script. These should not be reviewed for content issues. Instead, content reviews should focus on the original source markdown files located under the `manuals/` directory structure.
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use Jekyll front matter with layout, title, category, and permalink
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/copy_markdown_files.sh : Markdown files are manually copied to '_site' directory for direct access, supporting llms.txt standard for AI assistants
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/copy_markdown_files.sh : The 'bin/copy_markdown_files.sh' script copies all markdown files after Jekyll build to the '_site' directory for direct access
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/en/*.md : English documentation files use 'layout: docs-en', Japanese files use 'layout: docs-ja' in their front matter
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use descriptive names without numeric prefixes (e.g., 'installation.md', 'motivation.md')
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/ja/*.md : Japanese documentation files use 'layout: docs-ja' in their front matter
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : URLs for markdown files follow the pattern '/manuals/1.0/{lang}/{filename}.md' (AI-accessible) and '/manuals/1.0/{lang}/{filename}.html' (human-readable)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to _layouts/docs-*.html : Table of contents generation for documentation pages
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/bp/*.md : Best practices files in 'bp/' subdirectory use descriptive hyphenated names
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: If building manually without the scripts, run 'bundle exec jekyll build' followed by './bin/copy_markdown_files.sh'
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Permalinks for documentation files follow the pattern '/manuals/1.0/{lang}/{filename}.html'
🪛 LanguageTool
manuals/1.0/en/1page.md
[uncategorized] ~10-~10: The preposition “on” seems more likely in this position than the preposition “in”.
Context: ...anual contains all Ray.Di documentation in a single page for easy reference, print...
(AI_EN_LECTOR_REPLACEMENT_PREPOSITION_IN_ON)
[uncategorized] ~25-~25: This verb may not be in the correct tense. Consider changing the tense to fit the context better.
Context: ...s how to install Ray.Di from source and run the unit tests and demos. ```bash git ...
(AI_EN_LECTOR_REPLACEMENT_VERB_TENSE)
[grammar] ~271-~271: The word “lookup” is a noun. The verb is spelled with a space.
Context: ...the clients of BillingService need to lookup its dependencies. We can fix some of th...
(NOUN_VERB_CONFUSION)
[uncategorized] ~274-~274: A comma may be missing after the conjunctive/linking adverb ‘Otherwise’.
Context: ...asses, it's useful to have a framework. Otherwise you'll need to construct dependencies r...
(SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA)
[style] ~275-~275: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...truct dependencies recursively when you need to use a service: ```php <?php $processor...
(REP_NEED_TO_VB)
[style] ~288-~288: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...Ray.Di in our billing example, we first need to tell it how to map our interfaces to th...
(REP_NEED_TO_VB)
[style] ~334-~334: Consider simply using “of” instead.
Context: ...njector` can be used to get an instance of any of the bound classes. ```php <?php $injec...
(OF_ANY_OF)
[uncategorized] ~377-~377: You might be missing the article “the” here.
Context: ...estable or inflexible code, you can use dependency injection pattern to address all these ...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[uncategorized] ~395-~395: Possible missing comma found.
Context: ...s above can be used with any Database objects since Foo has no knowledge of how the...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~426-~426: Possible missing comma found.
Context: ...class's constructor arguments are its dependencies and applications useModule` to tell R...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~435-~435: You might be missing the article “the” here.
Context: ...ures all the necessary dependencies for Greeter class: ```php class CountProvi...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[uncategorized] ~468-~468: Possible missing article found.
Context: ...e complicated and Ray.Di makes creating complex object easy by creating all the [transi...
(AI_HYDRA_LEO_MISSING_A)
[uncategorized] ~472-~472: This verb does not appear to agree with the subject. Consider using a different form.
Context: ...example, a web server script might that looks like this: ```php final class MyWebSer...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[formatting] ~595-~595: Consider inserting a comma after addressing someone.
Context: ...cted a small dependency graph using Ray.Di that is capable of building instances o...
(SENT_START_NNP_COMMA)
[uncategorized] ~643-~643: Possible missing comma found.
Context: ...ed.md) declares two dependencies in its constructor and those dependencies are represented ...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~677-~677: Possible missing comma found.
Context: ...dencies that are of the same type, that is to make the type more specific: ```php...
(AI_HYDRA_LEO_MISSING_COMMA)
[formatting] ~689-~689: Consider inserting a comma here, unless the first half is essential to the meaning of the sentence.
Context: ...ting ) {} } `Key` with binding attribute can be created as: php $englishGree...
(WITH_THAT_COMMA)
[uncategorized] ~731-~731: You might be missing the article “the” here.
Context: ...he. Most applications do not implement Provider interface directly, they use `...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[uncategorized] ~733-~733: The grammatical number of this noun doesn’t look right. Consider replacing it.
Context: ...ernally creates Providers for all the object it knows how to create. For example, t...
(AI_EN_LECTOR_REPLACEMENT_NOUN_NUMBER)
[uncategorized] ~784-~784: When ‘Domain-Specific’ is used as a modifier, it is usually spelled with a hyphen.
Context: ... ways to do this: * Using the Ray.Di Domain Specific Language (DSL). Conceptually, these AP...
(SPECIFIC_HYPHEN)
[style] ~850-~850: Consider a more concise word here.
Context: ... the dependencies. You can imagine that in order to inject an instance of Foo as shown ab...
(IN_ORDER_TO_PREMIUM)
[uncategorized] ~905-~905: A punctuation mark might be missing here.
Context: ...ore. ## What's next? Learn how to use Scopes to manage the life...
(AI_EN_LECTOR_MISSING_PUNCTUATION)
[style] ~906-~906: ‘many different ways’ might be wordy. Consider a shorter alternative.
Context: ...le of objects created by Ray.Di and the many different ways to [add entries into the Ray.Di map](bi...
(EN_WORDINESS_PREMIUM_MANY_DIFFERENT_WAYS)
[grammar] ~927-~927: The singular proper name ‘Di’ must be used with a third-person or a past tense verb.
Context: ...l). You add new entries into the Ray.Di map by creating bindings. ## Creating Bind...
(HE_VERB_AGR)
[uncategorized] ~931-~931: Possible missing comma found.
Context: ...ding. These methods are type checked in compile can report errors if you use the wrong ...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~950-~950: A comma might be missing here.
Context: ...ndings In addition to the bindings you specify the injector includes [built-in binding...
(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)
[uncategorized] ~950-~950: Possible missing comma found.
Context: ... When a dependency is requested but not found it attempts to create a just-in-time bi...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~956-~956: Possible missing comma found.
Context: ...more bindings. * Earlier bindings have priority even if the same binding is made later....
(AI_HYDRA_LEO_MISSING_COMMA)
[typographical] ~980-~980: Consider adding a comma after ‘Occasionally’ for more clarity.
Context: ...lass); ``` *** ## Binding Attributes Occasionally you'll want multiple bindings for a sam...
(RB_LY_COMMA)
[uncategorized] ~1004-~1004: A determiner appears to be missing. Consider inserting it.
Context: ... specify parameter name with qualifier. Qualifier applied all parameters without it. ```...
(AI_EN_LECTOR_MISSING_DETERMINER)
[uncategorized] ~1010-~1010: A comma might be missing here.
Context: ...rdProcessorInterface $processor ){} ``` Lastly we create a binding that uses the attri...
(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)
[style] ~1020-~1020: Consider a more concise word here.
Context: ...``` ### Binding Attributes in Setters In order to make your custom Qualifier attribute ...
(IN_ORDER_TO_PREMIUM)
[style] ~1043-~1043: Consider shortening this phrase to just ‘whether’, unless you mean ‘regardless of whether’.
Context: ...)` method. It will be used to determine whether or not the injection should be performed based...
(WHETHER)
[style] ~1064-~1064: Consider a more concise word here.
Context: ...ion supplied in the qualifier attribute in order to instantiate the most appropriate class....
(IN_ORDER_TO_PREMIUM)
[style] ~1070-~1070: Consider a more concise word here.
Context: ..., the label can be used in the bindings in order to select the right class to be instantiat...
(IN_ORDER_TO_PREMIUM)
[style] ~1090-~1090: Consider a more concise word here.
Context: ...ou need to put the #[Named] attribuet in order to specify the parameter. ```php use Ray...
(IN_ORDER_TO_PREMIUM)
[typographical] ~1175-~1175: Consider adding a comma after ‘Finally’ for more clarity.
Context: ... return $transactionLog; } } ``` Finally we bind to the provider using the `toPr...
(RB_LY_COMMA)
[uncategorized] ~1205-~1205: You might be missing the article “the” here.
Context: ... `InjectionPointInterface` provides following methods. php $ip->getClass(); ...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[uncategorized] ~1231-~1231: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ructor or setter method because it is a third party class, Or you simply don't like to use ...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
[uncategorized] ~1231-~1231: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... use annotations. Constructor Binding provide the solution to this problem. By callin...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[typographical] ~1323-~1323: It appears that a comma is missing.
Context: ...pe you need until runtime. In this rare case you should inject the injector. Code th...
(DURING_THAT_TIME_COMMA)
[uncategorized] ~1329-~1329: Possible missing preposition found.
Context: ...paringly. ## Providers For every type Ray.Di knows about, it can also inject a Pr...
(AI_HYDRA_LEO_MISSING_OF)
[grammar] ~1355-~1355: The verb “write” needs to be in the to-infinitive form.
Context: ...e plugin consumer nor the plugin author need write much setup code for extensible applicat...
(MISSING_TO_BEFORE_A_VERB)
[typographical] ~1458-~1458: Consider adding a comma after ‘Finally’ for more clarity.
Context: ...set only if one is not already bound._ Finally we must register the plugins themselves...
(RB_LY_COMMA)
[uncategorized] ~1641-~1641: You might be missing the article “the” here.
Context: ...rameters to properties. You do not need #[Inject] attribute in constructor. ``...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[typographical] ~1708-~1708: Consider adding a comma after ‘Occasionally’ for more clarity.
Context: ...lly necessary. ## Optional Injections Occasionally it's convenient to use a dependency whe...
(RB_LY_COMMA)
[grammar] ~1780-~1780: The plural noun “details” cannot be used with the article “a”. Did you mean “a detail” or “details”?
Context: ...r application saves a summary entry and a details when a pizza charge fails. With provide...
(A_NNS)
[misspelling] ~1873-~1873: This expression is normally spelled as one or with a hyphen.
Context: ...ing_ method is invoked. It's suited for cross cutting concerns ("aspects"), such as transacti...
(EN_COMPOUNDS_CROSS_CUTTING)
[uncategorized] ~1873-~1873: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ather than objects, their use is called Aspect Oriented Programming (AOP). [Matcher](https://g...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
[style] ~1882-~1882: The word ‘thru’ is informal. Consider replacing it with “through”.
Context: ...nds. The delivery guys only work Monday thru Friday so we'll prevent pizza from bein...
(THRU)
[uncategorized] ~1882-~1882: A comma might be missing here.
Context: ...The delivery guys only work Monday thru Friday so we'll prevent pizza from being order...
(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)
[uncategorized] ~1882-~1882: You might be missing the article “the” here.
Context: ...This example is structurally similar to use of AOP for authorization. To mark sele...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[formatting] ~1925-~1925: Consider inserting a comma after an introductory phrase for better readability.
Context: ... ``` Finally, we configure everything. In this case we match any class, but only the method...
(IN_THAT_CASE_COMMA)
[uncategorized] ~1953-~1953: Use a comma before “and” if it connects two independent clauses (unless they are closely connected and short).
Context: ...urday), we see the method is intercepted and our order is rejected: ```php RuntimeE...
(COMMA_COMPOUND_SENTENCE_2)
[uncategorized] ~1995-~1995: Possible missing article found.
Context: ...tor API implemented by Ray.Di is mostly same as a public specification called [AOP ...
(AI_HYDRA_LEO_MISSING_THE)
[misspelling] ~2007-~2007: Did you mean “side effect” (=adverse effect, unintended consequence)? Open compounds are not hyphenated.
Context: ...e.html) * [Modules should be fast and side-effect free](bp/modules_should_be_fast_and_sid...
(AFFECT_EFFECT)
[uncategorized] ~2020-~2020: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...GraphViz](http://www.graphviz.org/), an open source graph visualization package. It cleanly...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
[style] ~2123-~2123: As a shorter alternative for ‘able to’, consider using “can”.
Context: ...velopment and production. The injector is able to inject singleton objects **beyond the r...
(BE_ABLE_TO)
[typographical] ~2157-~2157: It seems that a comma is missing after this introductory phrase.
Context: ...y.Di 2.0 was first released in 2015 and since then we've been supporting the latest PHP an...
(SINCE_THEN_COMMA)
[misspelling] ~2212-~2212: Did you mean “side effects” (=adverse effect, unintended consequence)? Open compounds are not hyphenated.
Context: .... Your tests should be fast and free of side-effects. But non-constant values held by static...
(AFFECT_EFFECT)
[uncategorized] ~2229-~2229: A comma might be missing here.
Context: ...s? Say that your application has a few classes including a Store, a Boss, and a `C...
(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)
[style] ~2257-~2257: For conciseness, consider replacing this expression with an adverb.
Context: ... { // Nothing interesting here } ``` Right now, the dependency chain is all good: cons...
(AT_THE_MOMENT)
[grammar] ~2261-~2261: The plural determiner ‘those’ does not agree with the singular noun ‘customer’.
Context: ... need a reference to the Store to get those customer: ```java public class Store { privat...
(THIS_NNS)
[uncategorized] ~2306-~2306: Possible missing preposition found.
Context: ...Dependency Case into a separate class. Take the above Store example, the work of ...
(AI_HYDRA_LEO_MISSING_TO)
[uncategorized] ~2367-~2367: A punctuation mark might be missing here.
Context: ...here, that unless Store is bound as a Singleton or in some...
(AI_EN_LECTOR_MISSING_PUNCTUATION)
[style] ~2369-~2369: Consider making your message more concise.
Context: ...e reused, the shopProvider.get() call will end up constructing a new Store, which will construct a n...
(DO_END_UP_VBG)
[style] ~2435-~2435: As an alternative to the over-used intensifier ‘quite’, consider replacing this phrase.
Context: ...AssistedInject](AssistedInject) is also quite good for such cases. ## Circular proxy feat...
(EN_WEAK_ADJECTIVE)
[uncategorized] ~2495-~2495: Although a hyphen is possible, it is not necessary in a compound modifier in which the first word is an adverb that ends in ‘ly’.
Context: ... of course, it makes sense to bind some highly-related bindings with the same attributes. E.g....
(HYPHENATED_LY_ADVERB_ADJECTIVE)
[grammar] ~2497-~2497: Do not use the singular ‘a’ before the plural noun ‘attributes’.
Context: ...ng. And you should definitely not reuse a binding attributes for unrelated bindings. When in doub...
(VB_A_JJ_NNS)
[style] ~2528-~2528: To make your writing clearer, consider a more direct alternative.
Context: ...encies Avoid injecting an object only as a means to get at another object. For example, don't i...
(AS_A_MEANS_TO)
[style] ~2528-~2528: To make your writing clearer, consider a more direct alternative.
Context: ... For example, don't inject a Customer as a means to get at an Account: ```php class ShowBudg...
(AS_A_MEANS_TO)
[misspelling] ~2626-~2626: Did you mean “side effect” (=adverse effect, unintended consequence)? Open compounds are not hyphenated.
Context: .... *** ### Modules should be fast and side-effect free Rather than using an external XM...
(AFFECT_EFFECT)
[style] ~2635-~2635: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...icult to write unit tests for it. * Modules can be overridden. Ray.Di modules sup...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[uncategorized] ~2637-~2637: Possible missing comma found.
Context: ...the proper level of abstraction. In our applications we use this interface: ```php interfac...
(AI_HYDRA_LEO_MISSING_COMMA)
[typographical] ~2682-~2682: Consider adding a comma after ‘Ideally’ for more clarity.
Context: ...ss type Group bindings into features. Ideally it should be possible to enable/disable...
(RB_LY_COMMA)
llms-full.txt
[uncategorized] ~19-~19: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...dvanced Techniques ## Best Practices ## Production Ready ## Optional ## Getting Started - [Ins...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
[uncategorized] ~25-~25: A punctuation mark might be missing here.
Context: ...and architecture of dependency injection - Tutorial: Build your first ...
(AI_EN_LECTOR_MISSING_PUNCTUATION)
[grammar] ~907-~907: The singular proper name ‘Di’ must be used with a third-person or a past tense verb.
Context: ...l). You add new entries into the Ray.Di map by creating bindings. ## Creating Bind...
(HE_VERB_AGR)
[uncategorized] ~911-~911: Possible missing comma found.
Context: ...ding. These methods are type checked in compile can report errors if you use the wrong ...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~930-~930: A comma might be missing here.
Context: ...ndings In addition to the bindings you specify the injector includes [built-in binding...
(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)
[uncategorized] ~930-~930: Possible missing comma found.
Context: ... When a dependency is requested but not found it attempts to create a just-in-time bi...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~936-~936: Possible missing comma found.
Context: ...more bindings. * Earlier bindings have priority even if the same binding is made later....
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~987-~987: You might be missing the article “the” here.
Context: ...estable or inflexible code, you can use dependency injection pattern to address all these ...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[uncategorized] ~1005-~1005: Possible missing comma found.
Context: ...s above can be used with any Database objects since Foo has no knowledge of how the...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~1036-~1036: Possible missing comma found.
Context: ...class's constructor arguments are its dependencies and applications useModule` to tell R...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~1045-~1045: You might be missing the article “the” here.
Context: ...ures all the necessary dependencies for Greeter class: ```php class CountProvi...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[uncategorized] ~1078-~1078: Possible missing article found.
Context: ...e complicated and Ray.Di makes creating complex object easy by creating all the [transi...
(AI_HYDRA_LEO_MISSING_A)
[uncategorized] ~1082-~1082: This verb does not appear to agree with the subject. Consider using a different form.
Context: ...example, a web server script might that looks like this: ```php final class MyWebSer...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[formatting] ~1205-~1205: Consider inserting a comma after addressing someone.
Context: ...cted a small dependency graph using Ray.Di that is capable of building instances o...
(SENT_START_NNP_COMMA)
[typographical] ~1261-~1261: Consider adding a comma after ‘Finally’ for more clarity.
Context: ... return $transactionLog; } } ``` Finally we bind to the provider using the `toPr...
(RB_LY_COMMA)
[uncategorized] ~1291-~1291: You might be missing the article “the” here.
Context: ... `InjectionPointInterface` provides following methods. php $ip->getClass(); ...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[uncategorized] ~1315-~1315: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ructor or setter method because it is a third party class, Or you simply don't like to use ...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
[uncategorized] ~1315-~1315: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... use annotations. Constructor Binding provide the solution to this problem. By callin...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[misspelling] ~1399-~1399: This expression is normally spelled as one or with a hyphen.
Context: ...ing_ method is invoked. It's suited for cross cutting concerns ("aspects"), such as transacti...
(EN_COMPOUNDS_CROSS_CUTTING)
[uncategorized] ~1399-~1399: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ather than objects, their use is called Aspect Oriented Programming (AOP). [Matcher](https://g...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
[style] ~1408-~1408: The word ‘thru’ is informal. Consider replacing it with “through”.
Context: ...nds. The delivery guys only work Monday thru Friday so we'll prevent pizza from bein...
(THRU)
[uncategorized] ~1408-~1408: A comma might be missing here.
Context: ...The delivery guys only work Monday thru Friday so we'll prevent pizza from being order...
(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)
[uncategorized] ~1408-~1408: You might be missing the article “the” here.
Context: ...This example is structurally similar to use of AOP for authorization. To mark sele...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[formatting] ~1451-~1451: Consider inserting a comma after an introductory phrase for better readability.
Context: ... ``` Finally, we configure everything. In this case we match any class, but only the method...
(IN_THAT_CASE_COMMA)
[uncategorized] ~1479-~1479: Use a comma before “and” if it connects two independent clauses (unless they are closely connected and short).
Context: ...urday), we see the method is intercepted and our order is rejected: ```php RuntimeE...
(COMMA_COMPOUND_SENTENCE_2)
[uncategorized] ~1521-~1521: Possible missing article found.
Context: ...tor API implemented by Ray.Di is mostly same as a public specification called [AOP ...
(AI_HYDRA_LEO_MISSING_THE)
[grammar] ~1630-~1630: The plural noun “details” cannot be used with the article “a”. Did you mean “a detail” or “details”?
Context: ...r application saves a summary entry and a details when a pizza charge fails. With provide...
(A_NNS)
[grammar] ~1717-~1717: The verb “write” needs to be in the to-infinitive form.
Context: ...e plugin consumer nor the plugin author need write much setup code for extensible applicat...
(MISSING_TO_BEFORE_A_VERB)
[typographical] ~1820-~1820: Consider adding a comma after ‘Finally’ for more clarity.
Context: ...set only if one is not already bound._ Finally we must register the plugins themselves...
(RB_LY_COMMA)
[style] ~1952-~1952: To make your writing clearer, consider a more direct alternative.
Context: ...dencies Avoid injecting an object only as a means to get at another object. For example, don't i...
(AS_A_MEANS_TO)
[style] ~1952-~1952: To make your writing clearer, consider a more direct alternative.
Context: ... For example, don't inject a Customer as a means to get at an Account: ```php class ShowBudg...
(AS_A_MEANS_TO)
[typographical] ~2001-~2001: Consider adding a comma after ‘Ideally’ for more clarity.
Context: ...ass type Group bindings into features. Ideally it should be possible to enable/disable...
(RB_LY_COMMA)
[misspelling] ~2016-~2016: Did you mean “side effects” (=adverse effect, unintended consequence)? Open compounds are not hyphenated.
Context: .... Your tests should be fast and free of side-effects. But non-constant values held by static...
(AFFECT_EFFECT)
[style] ~2073-~2073: As a shorter alternative for ‘able to’, consider using “can”.
Context: ...velopment and production. The injector is able to inject singleton objects **beyond the r...
(BE_ABLE_TO)
[typographical] ~2112-~2112: It seems that a comma is missing after this introductory phrase.
Context: ...y.Di 2.0 was first released in 2015 and since then we've been supporting the latest PHP an...
(SINCE_THEN_COMMA)
[misspelling] ~2121-~2121: Did you mean “side effect” (=adverse effect, unintended consequence)? Open compounds are not hyphenated.
Context: ...e.html) * [Modules should be fast and side-effect free](bp/modules_should_be_fast_and_sid...
(AFFECT_EFFECT)
[uncategorized] ~2132-~2132: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...GraphViz](http://www.graphviz.org/), an open source graph visualization package. It cleanly...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
[typographical] ~2177-~2177: Consider adding a comma after ‘Occasionally’ for more clarity.
Context: ...y backgrounds*. ## Binding Attributes Occasionally you'll want multiple bindings for a sam...
(RB_LY_COMMA)
[uncategorized] ~2201-~2201: A determiner appears to be missing. Consider inserting it.
Context: ... specify parameter name with qualifier. Qualifier applied all parameters without it. ```...
(AI_EN_LECTOR_MISSING_DETERMINER)
[uncategorized] ~2207-~2207: A comma might be missing here.
Context: ...rdProcessorInterface $processor ){} ``` Lastly we create a binding that uses the attri...
(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)
[style] ~2217-~2217: Consider a more concise word here.
Context: ...``` ### Binding Attributes in Setters In order to make your custom Qualifier attribute ...
(IN_ORDER_TO_PREMIUM)
[style] ~2240-~2240: Consider shortening this phrase to just ‘whether’, unless you mean ‘regardless of whether’.
Context: ...)` method. It will be used to determine whether or not the injection should be performed based...
(WHETHER)
[style] ~2261-~2261: Consider a more concise word here.
Context: ...ion supplied in the qualifier attribute in order to instantiate the most appropriate class....
(IN_ORDER_TO_PREMIUM)
[style] ~2267-~2267: Consider a more concise word here.
Context: ..., the label can be used in the bindings in order to select the right class to be instantiat...
(IN_ORDER_TO_PREMIUM)
[style] ~2287-~2287: Consider a more concise word here.
Context: ...ou need to put the #[Named] attribuet in order to specify the parameter. ```php use Ray...
(IN_ORDER_TO_PREMIUM)
[uncategorized] ~2340-~2340: You might be missing the article “the” here.
Context: ...rameters to properties. You do not need #[Inject] attribute in constructor. ``...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[typographical] ~2407-~2407: Consider adding a comma after ‘Occasionally’ for more clarity.
Context: ...lly necessary. ## Optional Injections Occasionally it's convenient to use a dependency whe...
(RB_LY_COMMA)
🪛 markdownlint-cli2 (0.17.2)
manuals/1.0/en/1page.md
350-350: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
350-350: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
515-515: Link and image reference definitions should be needed
Unused link or image reference definition: "injector"
(MD053, link-image-reference-definitions)
607-607: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
607-607: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
663-663: Hard tabs
Column: 5
(MD010, no-hard-tabs)
925-925: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
925-925: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
925-925: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1104-1104: Bare URL used
(MD034, no-bare-urls)
1218-1218: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1218-1218: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1251-1251: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1255-1255: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1262-1262: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
1264-1264: Hard tabs
Column: 1
(MD010, no-hard-tabs)
1265-1265: Hard tabs
Column: 1
(MD010, no-hard-tabs)
1272-1272: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1278-1278: Hard tabs
Column: 1
(MD010, no-hard-tabs)
1279-1279: Hard tabs
Column: 1
(MD010, no-hard-tabs)
1283-1283: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1316-1316: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1316-1316: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1316-1316: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1341-1341: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1341-1341: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1341-1341: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1454-1454: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1457-1457: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1632-1632: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1632-1632: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1632-1632: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1674-1674: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1674-1674: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1827-1827: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1827-1827: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1871-1871: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1871-1871: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1871-1871: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1873-1873: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1873-1873: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
2056-2056: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
2057-2057: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
2058-2058: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
2061-2061: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
2062-2062: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
2349-2349: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
2349-2349: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
2631-2631: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
2631-2631: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
🪛 RuboCop (1.75.5)
bin/merge_md_files.rb
[convention] 33-43: Redundant assignment before returning detected.
(Style/RedundantAssignment)
[convention] 54-139: Assignment Branch Condition size for generate_combined_file is too high. [<20, 58, 23> 65.52/23]
(Metrics/AbcSize)
[convention] 54-139: Cyclomatic complexity for generate_combined_file is too high. [18/7]
(Metrics/CyclomaticComplexity)
[convention] 54-139: Perceived complexity for generate_combined_file is too high. [20/8]
(Metrics/PerceivedComplexity)
🔇 Additional comments (10)
manuals/1.0/en/InjectingProviders.md (1)
34-40: Docblock and attribute swap now consistent – nice catch
The generic types in the PHPDoc and the#[Set]attributes are now aligned with the constructor parameters. This removes the reader-confusion present in the previous revision.manuals/1.0/en/1page.md (1)
1-6: Generated file – content review intentionally skipped
Per repository guidance,1page.mdis auto-generated bymerge_md_files.rb; reviewing its prose duplicates effort.bin/generate_llms_full.php (3)
36-38: LGTM: Clean refactoring of section detection logic.The changes generalize section detection by treating any
## ...header as a potential current section, which is more flexible than relying on predefined section lists.
39-48: LGTM: Improved link section initialization logic.The refactored logic properly handles the transition from header parsing to link processing by removing the section header from
$headerLinesand initializing the link section array when needed.
72-77: LGTM: Enhanced description extraction with regex.The regex-based approach for extracting descriptions after the colon is more accurate than the previous substring method and properly handles edge cases.
bin/merge_md_files.rb (5)
3-3: LGTM: Good addition of Pathname for better path handling.Using Pathname provides cleaner and more reliable path manipulation compared to string-based approaches.
5-9: LGTM: Clean utility function for filename conversion.The kebab-case to CamelCase conversion properly handles both underscore and hyphen separators as documented.
11-46: LGTM: Excellent improvement to derive order from navigation.This is a significant enhancement that ensures the merged manual reflects the actual site navigation order, making it much more user-friendly than alphabetical ordering.
48-52: LGTM: Improved frontmatter stripping with better regex.The enhanced regex properly handles corrupted frontmatter patterns like "1---" which improves robustness.
142-143: LGTM: Descriptive intro messages for both languages.The updated intro messages clearly communicate the purpose and benefits of the comprehensive manual format.
Fixed multiple syntax errors identified in code review: - Added missing 'function' keyword in static method declarations - Fixed variable references to use $this-> for class properties - Corrected typo in interface name (PhotoPaternMatcherInterface -> PhotoPatternMatcherInterface) - Fixed foreach syntax (for -> foreach) - Added missing 'function' keyword in method declarations These fixes ensure all PHP code examples in the Japanese documentation have correct syntax. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
Fixed the following syntax errors: - Added missing 'function' keyword in method declarations - Fixed interface name typo (PhotoPaternMatcherInterface → PhotoPatternMatcherInterface) - Fixed foreach syntax ($this->summarizer → $this->summarizers) - Added missing comma in constructor parameter list 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
|
@sourcery-ai review |
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey @koriym - I've reviewed your changes and found some issues that need to be addressed.
Blocking issues:
- Syntax error: missing closing parenthesis in constructor parameter. (link)
General comments:
- I noticed merge_md_files.rb’s bottom only calls generate_combined_file for “en” now—please restore the
generate_combined_file("ja", …)invocation so the Japanese one-page manual still gets built. - You bumped several gems in Gemfile but didn’t include a Gemfile.lock update—run
bundle updateand commit the lock file so the new Jekyll/plugins versions are actually locked in CI. - In extract_order_from_contents fallback you only sort top‐level .md files alphabetically, which skips bp/ files unless manually appended—consider merging bp files into the fallback order or surfacing a warning/error when navigation parsing fails so missing docs aren’t silently dropped.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- I noticed merge_md_files.rb’s bottom only calls generate_combined_file for “en” now—please restore the `generate_combined_file("ja", …)` invocation so the Japanese one-page manual still gets built.
- You bumped several gems in Gemfile but didn’t include a Gemfile.lock update—run `bundle update` and commit the lock file so the new Jekyll/plugins versions are actually locked in CI.
- In extract_order_from_contents fallback you only sort top‐level .md files alphabetically, which skips bp/ files unless manually appended—consider merging bp files into the fallback order or surfacing a warning/error when navigation parsing fails so missing docs aren’t silently dropped.
## Individual Comments
### Comment 1
<location> `bin/merge_md_files.rb:51` </location>
<code_context>
+def strip_frontmatter(content)
+ # Remove Jekyll frontmatter only from the very beginning of the file
+ # Handle both standard frontmatter and corrupted patterns like "1---"
+ content.sub(/\A\d*---\s*\n.*?\n---\s*\n/m, '')
+end
</code_context>
<issue_to_address>
The frontmatter stripping regex may be too permissive and could remove content unintentionally.
The optional leading number in the regex (\A\d*---) may cause it to strip content that isn't frontmatter. Please adjust the pattern to only match valid frontmatter blocks.
</issue_to_address>
### Comment 2
<location> `bin/merge_md_files.rb:49` </location>
<code_context>
- puts "Does the source folder exist? #{Dir.exist?(source_folder)}"
- raise "Source folder does not exist!" unless File.directory?(source_folder)
+def strip_frontmatter(content)
+ # Remove Jekyll frontmatter only from the very beginning of the file
+ # Handle both standard frontmatter and corrupted patterns like "1---"
+ content.sub(/\A\d*---\s*\n.*?\n---\s*\n/m, '')
+end
</code_context>
<issue_to_address>
The regex for frontmatter removal may not handle files with Windows line endings.
Update the regex to support both LF (\n) and CRLF (\r\n) line endings for compatibility with files from different operating systems.
</issue_to_address>
<suggested_fix>
<<<<<<< SEARCH
def strip_frontmatter(content)
# Remove Jekyll frontmatter only from the very beginning of the file
# Handle both standard frontmatter and corrupted patterns like "1---"
content.sub(/\A\d*---\s*\n.*?\n---\s*\n/m, '')
end
=======
def strip_frontmatter(content)
# Remove Jekyll frontmatter only from the very beginning of the file
# Handle both standard frontmatter and corrupted patterns like "1---"
# Support both LF (\n) and CRLF (\r\n) line endings
content.sub(/\A\d*---\s*\r?\n.*?\r?\n---\s*\r?\n/m, '')
end
>>>>>>> REPLACE
</suggested_fix>
### Comment 3
<location> `manuals/1.0/ja/1page.md:1482` </location>
<code_context>
+ $this->context = $context;
+ }
+
+ public function __construct(#[Named('db_config') array $dbConfigs)
+ {
+ $this->dbConfigs = $dbConfigs;
</code_context>
<issue_to_address>
Syntax error: missing closing parenthesis in constructor parameter.
In DbalProvider, add the missing closing parenthesis to the constructor parameter: 'public function __construct(#[Named('db_config')] array $dbConfigs)'.
</issue_to_address>
### Comment 4
<location> `manuals/1.0/en/1page.md:410` </location>
<code_context>
-class CustomersModule extends AbstractModule
+class Greeter
+{
+ // Greeter declares that it needs a string message and an integer
+ // representing the number of time the message to be printed.
+ public function __construct(
+ #[Message] readonly string $message,
</code_context>
<issue_to_address>
Grammatical error: 'number of time' should be 'number of times'.
It should say: 'number of times the message is to be printed.'
</issue_to_address>
<suggested_fix>
<<<<<<< SEARCH
// Greeter declares that it needs a string message and an integer
// representing the number of time the message to be printed.
=======
// Greeter declares that it needs a string message and an integer
// representing the number of times the message is to be printed.
>>>>>>> REPLACE
</suggested_fix>
### Comment 5
<location> `manuals/1.0/en/1page.md:1090` </location>
<code_context>
+ ->to(CheckoutCreditCardProcessor::class);
+```
+
+You need to put the `#[Named]` attribuet in order to specify the parameter.
+
+```php
</code_context>
<issue_to_address>
Typo: 'attribuet' should be 'attribute'.
</issue_to_address>
<suggested_fix>
<<<<<<< SEARCH
You need to put the `#[Named]` attribuet in order to specify the parameter.
=======
You need to put the `#[Named]` attribute in order to specify the parameter.
>>>>>>> REPLACE
</suggested_fix>
### Comment 6
<location> `manuals/1.0/en/1page.md:2121` </location>
<code_context>
+
+## CachedInjectorFactory
+
+The `CachedInejctorFactory` can be used in a hybrid of the two injectors to achieve the best performance in both development and production.
+
+The injector is able to inject singleton objects **beyond the request**, greatly increasing the speed of testing. Successive PDO connections also do not run out of connection resources in the test.
</code_context>
<issue_to_address>
Typo: 'CachedInejctorFactory' should be 'CachedInjectorFactory'.
</issue_to_address>
<suggested_fix>
<<<<<<< SEARCH
## CachedInjectorFactory
The `CachedInejctorFactory` can be used in a hybrid of the two injectors to achieve the best performance in both development and production.
The injector is able to inject singleton objects **beyond the request**, greatly increasing the speed of testing. Successive PDO connections also do not run out of connection resources in the test.
=======
## CachedInjectorFactory
The `CachedInjectorFactory` can be used in a hybrid of the two injectors to achieve the best performance in both development and production.
The injector is able to inject singleton objects **beyond the request**, greatly increasing the speed of testing. Successive PDO connections also do not run out of connection resources in the test.
>>>>>>> REPLACE
</suggested_fix>
### Comment 7
<location> `manuals/1.0/en/1page.md:1334` </location>
<code_context>
+
+## Multi-bundling
+
+Multi bindinga allows multiple implementations to be injected for a type.
+It is explained in detail in [MultiBindings](multibindings.html).
+
</code_context>
<issue_to_address>
Typo: 'bindinga' should be 'bindings'.
</issue_to_address>
<suggested_fix>
<<<<<<< SEARCH
## Multi-bundling
Multi bindinga allows multiple implementations to be injected for a type.
It is explained in detail in [MultiBindings](multibindings.html).
=======
## Multi-bundling
Multi bindings allows multiple implementations to be injected for a type.
It is explained in detail in [MultiBindings](multibindings.html).
>>>>>>> REPLACE
</suggested_fix>
### Comment 8
<location> `manuals/1.0/en/1page.md:798` </location>
<code_context>
+
+`DemoModule` adds two entries into the Ray.Di map:
+
+* `#[Message] string` --> `fn() => (new MessageProvicer)->get()`
+* `#[Count] int` --> `fn() => (new CountProvicer)->get()`
+
</code_context>
<issue_to_address>
Typo: 'MessageProvicer' should be 'MessageProvider'.
</issue_to_address>
<suggested_fix>
<<<<<<< SEARCH
* `#[Message] string` --> `fn() => (new MessageProvicer)->get()`
* `#[Count] int` --> `fn() => (new CountProvicer)->get()`
=======
* `#[Message] string` --> `fn() => (new MessageProvider)->get()`
* `#[Count] int` --> `fn() => (new CountProvicer)->get()`
>>>>>>> REPLACE
</suggested_fix>
### Comment 9
<location> `bin/merge_md_files.rb:24` </location>
<code_context>
+ markdown_files
end
-def generate_combined_file(language, intro_message)
- source_folder = File.expand_path("../manuals/1.0/#{language}/", __dir__)
- output_file = "manuals/1.0/#{language}/1page.md"
</code_context>
<issue_to_address>
Consider refactoring generate_combined_file by extracting logical chunks into well-named helper methods to improve readability and reduce nesting.
```markdown
You can drastically reduce the nesting and improve readability by pulling each “chunk” of logic out of `generate_combined_file` into small, well-named helpers. For example:
```ruby
# List the main docs in the correct order or fallback to alphabetical
def list_main_files(source, language)
order = extract_order_from_contents(language)
order ||= default_alphabetical_list(source)
order.map { |fn| source.join(fn) }.select(&:file?)
end
def default_alphabetical_list(source)
source.glob("*.md")
.map(&:basename).map(&:to_s)
.reject { |f| %w[1page.md ai-assistant.md].include?(f) }
.sort
end
# List the best-practices under bp/
def list_bp_files(source)
bp = source.join("bp")
bp.directory? ? bp.glob("*.md").sort : []
end
# Write the common front-matter header
def write_header(out, language, intro_message)
out.write <<~HEADER
---
layout: docs-#{language}
title: Ray.Di Complete Manual
category: Manual
permalink: /manuals/1.0/#{language}/1page.html
---
#{intro_message}
***
HEADER
end
# Write one section (main or BP), handling headings
def write_section(out, path, is_bp: false)
raw = strip_frontmatter(path.read).strip
return if raw.empty?
if is_bp
if raw =~ /\A\#{1,6}\s+(.+?)\n(.*)/m
title, body = $1, $2
out.write("\n### #{title}\n\n#{body}\n")
else
title = path.basename(".md").to_s.gsub(/([A-Z])/, ' \1').strip
out.write("\n### #{title}\n\n#{raw}\n")
end
else
out.write("\n" + raw + "\n")
end
end
```
Then your `generate_combined_file` becomes:
```ruby
def generate_combined_file(language, intro_message)
source = Pathname.new(__dir__).join("..", "manuals/1.0/#{language}")
output_file = source.join("1page.md")
raise "Source folder does not exist!" unless source.directory?
main_files = list_main_files(source, language)
bp_files = list_bp_files(source)
all_files = main_files + bp_files
File.open(output_file, "w") do |out|
write_header(out, language, intro_message)
bp_start = main_files.size
all_files.each_with_index do |path, idx|
out.write("\n***\n\n") if idx > 0
out.write("## Best Practices Details\n\n") if idx == bp_start
write_section(out, path, is_bp: idx >= bp_start)
puts " #{idx < bp_start ? 'Added:' : 'Added BP:'} #{path.basename}"
end
end
puts "Generated: #{output_file}"
puts "Total sections: #{all_files.size}"
end
```
This keeps each piece focused, removes deeply nested branches, and makes the overall flow in `generate_combined_file` much clearer.
</issue_to_address>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
|
@coderabbitai Do not review 1page.md or llms-full.txt. Those are generated document. |
|
Tip For best results, initiate chat on the files or code changes. @koriym, understood! I'll exclude those generated documents from content reviews. I can see from the existing learnings that ✏️ Learnings added
🧠 Learnings used |
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
Fixed issues from code review: - Fix frontmatter regex to only match valid YAML frontmatter - Add support for CRLF line endings in frontmatter regex - Include bp files in fallback order when navigation parsing fails - Fix typos: "attribuet" → "attribute", "CachedInejctorFactory" → "CachedInjectorFactory" - Fix typos: "Multi bindinga" → "Multi bindings", "MessageProvicer" → "MessageProvider" - Fix grammar: "number of time" → "number of times" - Fix missing closing parenthesis in DbalProvider constructor - Update Gemfile.lock with bundle update 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
Fixed Rouge syntax highlighter incorrectly marking PHP8 attributes (#[Named]) as errors. - Disabled error highlighting specifically for PHP code blocks - Applied purple color styling for PHP attributes instead of red error highlighting - Preserved error highlighting for other languages 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
|
@sourcery-ai All mentions you made have been corrected! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (1)
bin/merge_md_files.rb (1)
54-142: Refactor to reduce complexity and improve maintainability.This function has high complexity metrics (ABC size 79.28/23, cyclomatic complexity 23/7) and should be refactored into smaller, focused methods as suggested in previous reviews.
Consider extracting these logical chunks:
- File ordering logic (lines 61-73)
- File processing and writing (lines 82-138)
- Header writing (lines 84-97)
- Section rendering with best practices handling (lines 103-137)
+def determine_file_order(source, language) + file_order = extract_order_from_contents(language) + return file_order if file_order && !file_order.empty? + + puts "Warning: Could not extract order from contents.html, using alphabetical order" + main_md_files = source.glob("*.md") + .map(&:basename) + .map(&:to_s) + .reject { |f| %w[1page.md ai-assistant.md].include?(f) } + .sort + bp_md_files = source.join("bp").directory? ? + source.join("bp").glob("*.md").map(&:basename).map(&:to_s).sort : [] + main_md_files + bp_md_files.map { |f| "bp/#{f}" } +end + +def write_header(out, language, intro_message) + out.write <<~HEADER + --- + layout: docs-#{language} + title: Ray.Di Complete Manual + category: Manual + permalink: /manuals/1.0/#{language}/1page.html + --- + + # Ray.Di Complete Manual + + #{intro_message} + + *** + HEADER +end + +def process_file_content(out, path, idx, main_files_count) + content = strip_frontmatter(path.read).strip + return false if content.empty? + + # Add separator between sections (except first) + out.write("\n***\n\n") if idx > 0 + + # Add BP section header if this is the first BP file + if idx == main_files_count && idx < all_files.length + out.write("## Best Practices Details\n\n") + end + + # Handle best practices heading conversion + if path.dirname.basename.to_s == "bp" + if content =~ /\A\#{1,6}\s+(.+?)\n(.*)/m + heading_text = $1 + remaining_content = $2 + out.write("\n### #{heading_text}\n\n#{remaining_content}\n") + else + # No heading found, generate from filename + title = path.basename(".md").to_s.gsub(/([A-Z])/, ' \1').strip + out.write("\n### #{title}\n\n#{content}\n") + end + puts " Added BP: #{path.basename}" + else + out.write(content + "\n") + puts " Added: #{path.basename}" + end + + true +end def generate_combined_file(language, intro_message) source = Pathname.new(__dir__).join("..", "manuals/1.0/#{language}") output_file = source.join("1page.md") puts "Processing #{language} documentation..." raise "Source folder does not exist!" unless source.directory? - # Determine file order from contents.html or fallback to alphabetical - file_order = extract_order_from_contents(language) - if file_order.nil? || file_order.empty? - puts "Warning: Could not extract order from contents.html, using alphabetical order" - main_md_files = source.glob("*.md") - .map(&:basename) - .map(&:to_s) - .reject { |f| %w[1page.md ai-assistant.md].include?(f) } - .sort - bp_md_files = source.join("bp").directory? ? - source.join("bp").glob("*.md").map(&:basename).map(&:to_s).sort : [] - file_order = main_md_files + bp_md_files.map { |f| "bp/#{f}" } - end + file_order = determine_file_order(source, language) # Gather all files: main files in order + best practices all_files = file_order.map { |fn| source.join(fn) }.select(&:file?) main_files = all_files.reject { |f| f.dirname.basename.to_s == "bp" } - bp_files = all_files.select { |f| f.dirname.basename.to_s == "bp" } files_processed = 0 File.open(output_file, "w") do |out| - # Write header - out.write <<~HEADER - --- - layout: docs-#{language} - title: Ray.Di Complete Manual - category: Manual - permalink: /manuals/1.0/#{language}/1page.html - --- - - # Ray.Di Complete Manual - - #{intro_message} - - *** - HEADER + write_header(out, language, intro_message) - # Add best practices header before BP files - bp_start_index = main_files.length - # Process all files in a single pass all_files.each_with_index do |path, idx| begin - content = strip_frontmatter(path.read).strip - next if content.empty? - - # Add separator between sections (except first) - out.write("\n***\n\n") if idx > 0 - - # Add BP section header if this is the first BP file - if idx == bp_start_index && idx < all_files.length - out.write("## Best Practices Details\n\n") - end - - # Handle best practices heading conversion - if path.dirname.basename.to_s == "bp" - if content =~ /\A\#{1,6}\s+(.+?)\n(.*)/m - heading_text = $1 - remaining_content = $2 - out.write("\n### #{heading_text}\n\n#{remaining_content}\n") - else - # No heading found, generate from filename - title = path.basename(".md").to_s.gsub(/([A-Z])/, ' \1').strip - out.write("\n### #{title}\n\n#{content}\n") - end - puts " Added BP: #{path.basename}" - else - out.write(content + "\n") - puts " Added: #{path.basename}" - end - - files_processed += 1 + if process_file_content(out, path, idx, main_files.length) + files_processed += 1 + end rescue => e puts " Error processing #{path.basename}: #{e.message}" end end end puts "Generated: #{output_file}" puts "Total sections: #{files_processed}" endThis refactoring:
- Extracts file ordering logic into
determine_file_order- Separates header writing into
write_header- Isolates file content processing into
process_file_content- Reduces the main function's complexity significantly
- Improves readability and maintainability
🧹 Nitpick comments (4)
manuals/1.0/en/BindingAttributes.md (1)
118-118: Tighten the wordingConsider rewriting for brevity:
-You need to put the `#[Named]` attribute in order to specify the parameter. +Add the `#[Named]` attribute to the parameter you want to qualify.manuals/1.0/en/BuiltinBindings.md (1)
27-27: Subject–verb agreement-Multi bindings allows multiple implementations to be injected for a type. +Multi bindings allow multiple implementations to be injected for a type.bin/merge_md_files.rb (2)
33-43: Simplify by removing redundant assignment.The static analysis correctly identifies a redundant assignment. You can return the result directly instead of assigning to a variable first.
- # Convert HTML filenames to markdown filenames - markdown_files = permalinks.map do |permalink| - # Remove .html extension - base = permalink.sub('.html', '') - - # Skip AI assistant and other non-documentation pages - skip_pages = ['ai-assistant', 'index', '1page'] - next nil if skip_pages.include?(base) - - # Convert kebab-case to CamelCase - convert_to_markdown_filename(base) - end.compact - - markdown_files + # Convert HTML filenames to markdown filenames and return directly + permalinks.map do |permalink| + # Remove .html extension + base = permalink.sub('.html', '') + + # Skip AI assistant and other non-documentation pages + skip_pages = ['ai-assistant', 'index', '1page'] + next nil if skip_pages.include?(base) + + # Convert kebab-case to CamelCase + convert_to_markdown_filename(base) + end.compact
78-78: Remove unused variable assignment.The
bp_filesvariable is assigned but never used, which triggers a static analysis warning.- bp_files = all_files.select { |f| f.dirname.basename.to_s == "bp" }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (14)
.claude/settings.local.json(1 hunks)Dockerfile(1 hunks)bin/copy_markdown_files.sh(1 hunks)bin/merge_md_files.rb(1 hunks)css/syntax.css(1 hunks)llms-full.txt(6 hunks)manuals/1.0/en/1page.md(1 hunks)manuals/1.0/en/BindingAttributes.md(2 hunks)manuals/1.0/en/BuiltinBindings.md(1 hunks)manuals/1.0/en/ContextualBindings.md(2 hunks)manuals/1.0/en/GettingStarted.md(5 hunks)manuals/1.0/en/MentalModel.md(1 hunks)manuals/1.0/en/PerformanceBoost.md(1 hunks)manuals/1.0/ja/1page.md(1 hunks)
✅ Files skipped from review due to trivial changes (2)
- manuals/1.0/en/PerformanceBoost.md
- css/syntax.css
🚧 Files skipped from review as they are similar to previous changes (5)
- .claude/settings.local.json
- Dockerfile
- bin/copy_markdown_files.sh
- manuals/1.0/en/GettingStarted.md
- manuals/1.0/en/ContextualBindings.md
🧰 Additional context used
📓 Path-based instructions (4)
`manuals/1.0/{en,ja}/*.md`: Documentation files use descriptive names without nu...
manuals/1.0/{en,ja}/*.md: Documentation files use descriptive names without numeric prefixes (e.g., 'installation.md', 'motivation.md')
Documentation files use Jekyll front matter with layout, title, category, and permalink
Permalinks for documentation files follow the pattern '/manuals/1.0/{lang}/{filename}.html'
URLs for markdown files follow the pattern '/manuals/1.0/{lang}/{filename}.md' (AI-accessible) and '/manuals/1.0/{lang}/{filename}.html' (human-readable)
📄 Source: CodeRabbit Inference Engine (CLAUDE.md)
List of files the instruction was applied to:
manuals/1.0/en/MentalModel.mdmanuals/1.0/en/1page.mdmanuals/1.0/ja/1page.mdmanuals/1.0/en/BindingAttributes.mdmanuals/1.0/en/BuiltinBindings.md
`manuals/1.0/en/*.md`: English documentation files use 'layout: docs-en', Japanese files use 'layout: docs-ja' in their front matter
manuals/1.0/en/*.md: English documentation files use 'layout: docs-en', Japanese files use 'layout: docs-ja' in their front matter
📄 Source: CodeRabbit Inference Engine (CLAUDE.md)
List of files the instruction was applied to:
manuals/1.0/en/MentalModel.mdmanuals/1.0/en/1page.mdmanuals/1.0/en/BindingAttributes.mdmanuals/1.0/en/BuiltinBindings.md
`bin/merge_md_files.rb`: The 'bin/merge_md_files.rb' script combines all manual markdown files into single-page versions for both languages
bin/merge_md_files.rb: The 'bin/merge_md_files.rb' script combines all manual markdown files into single-page versions for both languages
📄 Source: CodeRabbit Inference Engine (CLAUDE.md)
List of files the instruction was applied to:
bin/merge_md_files.rb
`manuals/1.0/ja/*.md`: Japanese documentation files use 'layout: docs-ja' in their front matter
manuals/1.0/ja/*.md: Japanese documentation files use 'layout: docs-ja' in their front matter
📄 Source: CodeRabbit Inference Engine (CLAUDE.md)
List of files the instruction was applied to:
manuals/1.0/ja/1page.md
🧠 Learnings (6)
📓 Common learnings
Learnt from: koriym
PR: ray-di/ray-di.github.io#0
File: :0-0
Timestamp: 2025-06-30T23:04:00.790Z
Learning: In the ray-di.github.io repository, files named `1page.md` (like `manuals/1.0/en/1page.md` and `manuals/1.0/ja/1page.md`) are generated files created by the `bin/merge_md_files.rb` script. These should not be reviewed for content issues. Instead, content reviews should focus on the original source markdown files located under the `manuals/` directory structure.
Learnt from: koriym
PR: ray-di/ray-di.github.io#0
File: :0-0
Timestamp: 2025-07-01T03:22:13.744Z
Learning: The file `llms-full.txt` in the ray-di.github.io repository is a generated document that should not be reviewed for content issues.
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/merge_md_files.rb : The 'bin/merge_md_files.rb' script combines all manual markdown files into single-page versions for both languages
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/ja/*.md : Japanese documentation files use 'layout: docs-ja' in their front matter
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/en/*.md : English documentation files use 'layout: docs-en', Japanese files use 'layout: docs-ja' in their front matter
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use descriptive names without numeric prefixes (e.g., 'installation.md', 'motivation.md')
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use Jekyll front matter with layout, title, category, and permalink
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : URLs for markdown files follow the pattern '/manuals/1.0/{lang}/{filename}.md' (AI-accessible) and '/manuals/1.0/{lang}/{filename}.html' (human-readable)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/copy_markdown_files.sh : Markdown files are manually copied to '_site' directory for direct access, supporting llms.txt standard for AI assistants
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Permalinks for documentation files follow the pattern '/manuals/1.0/{lang}/{filename}.html'
manuals/1.0/en/1page.md (1)
Learnt from: koriym
PR: ray-di/ray-di.github.io#0
File: :0-0
Timestamp: 2025-06-30T23:04:00.790Z
Learning: In the ray-di.github.io repository, files named `1page.md` (like `manuals/1.0/en/1page.md` and `manuals/1.0/ja/1page.md`) are generated files created by the `bin/merge_md_files.rb` script. These should not be reviewed for content issues. Instead, content reviews should focus on the original source markdown files located under the `manuals/` directory structure.
bin/merge_md_files.rb (14)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/merge_md_files.rb : The 'bin/merge_md_files.rb' script combines all manual markdown files into single-page versions for both languages
Learnt from: koriym
PR: ray-di/ray-di.github.io#0
File: :0-0
Timestamp: 2025-06-30T23:04:00.790Z
Learning: In the ray-di.github.io repository, files named `1page.md` (like `manuals/1.0/en/1page.md` and `manuals/1.0/ja/1page.md`) are generated files created by the `bin/merge_md_files.rb` script. These should not be reviewed for content issues. Instead, content reviews should focus on the original source markdown files located under the `manuals/` directory structure.
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/copy_markdown_files.sh : Markdown files are manually copied to '_site' directory for direct access, supporting llms.txt standard for AI assistants
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to bin/copy_markdown_files.sh : The 'bin/copy_markdown_files.sh' script copies all markdown files after Jekyll build to the '_site' directory for direct access
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use Jekyll front matter with layout, title, category, and permalink
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/en/*.md : English documentation files use 'layout: docs-en', Japanese files use 'layout: docs-ja' in their front matter
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : URLs for markdown files follow the pattern '/manuals/1.0/{lang}/{filename}.md' (AI-accessible) and '/manuals/1.0/{lang}/{filename}.html' (human-readable)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/ja/*.md : Japanese documentation files use 'layout: docs-ja' in their front matter
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use descriptive names without numeric prefixes (e.g., 'installation.md', 'motivation.md')
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to _layouts/docs-*.html : Table of contents generation for documentation pages
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/bp/*.md : Best practices files in 'bp/' subdirectory use descriptive hyphenated names
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: If building manually without the scripts, run 'bundle exec jekyll build' followed by './bin/copy_markdown_files.sh'
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to _config.yml : Configured for GitHub Pages compatibility in Jekyll
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Permalinks for documentation files follow the pattern '/manuals/1.0/{lang}/{filename}.html'
manuals/1.0/ja/1page.md (1)
Learnt from: koriym
PR: ray-di/ray-di.github.io#0
File: :0-0
Timestamp: 2025-06-30T23:04:00.790Z
Learning: In the ray-di.github.io repository, files named `1page.md` (like `manuals/1.0/en/1page.md` and `manuals/1.0/ja/1page.md`) are generated files created by the `bin/merge_md_files.rb` script. These should not be reviewed for content issues. Instead, content reviews should focus on the original source markdown files located under the `manuals/` directory structure.
llms-full.txt (1)
Learnt from: koriym
PR: ray-di/ray-di.github.io#0
File: :0-0
Timestamp: 2025-07-01T03:22:13.744Z
Learning: The file `llms-full.txt` in the ray-di.github.io repository is a generated document that should not be reviewed for content issues.
manuals/1.0/en/BindingAttributes.md (1)
Learnt from: CR
PR: ray-di/ray-di.github.io#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T16:36:41.107Z
Learning: Applies to manuals/1.0/{en,ja}/*.md : Documentation files use descriptive names without numeric prefixes (e.g., 'installation.md', 'motivation.md')
🪛 LanguageTool
manuals/1.0/en/1page.md
[uncategorized] ~10-~10: The preposition “on” seems more likely in this position than the preposition “in”.
Context: ...anual contains all Ray.Di documentation in a single page for easy reference, print...
(AI_EN_LECTOR_REPLACEMENT_PREPOSITION_IN_ON)
[uncategorized] ~25-~25: This verb may not be in the correct tense. Consider changing the tense to fit the context better.
Context: ...s how to install Ray.Di from source and run the unit tests and demos. ```bash git ...
(AI_EN_LECTOR_REPLACEMENT_VERB_TENSE)
[grammar] ~271-~271: The word “lookup” is a noun. The verb is spelled with a space.
Context: ...the clients of BillingService need to lookup its dependencies. We can fix some of th...
(NOUN_VERB_CONFUSION)
[uncategorized] ~274-~274: A comma may be missing after the conjunctive/linking adverb ‘Otherwise’.
Context: ...asses, it's useful to have a framework. Otherwise you'll need to construct dependencies r...
(SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA)
[style] ~275-~275: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...truct dependencies recursively when you need to use a service: ```php <?php $processor...
(REP_NEED_TO_VB)
[style] ~288-~288: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...Ray.Di in our billing example, we first need to tell it how to map our interfaces to th...
(REP_NEED_TO_VB)
[style] ~334-~334: Consider simply using “of” instead.
Context: ...njector` can be used to get an instance of any of the bound classes. ```php <?php $injec...
(OF_ANY_OF)
[uncategorized] ~377-~377: You might be missing the article “the” here.
Context: ...estable or inflexible code, you can use dependency injection pattern to address all these ...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[uncategorized] ~395-~395: Possible missing comma found.
Context: ...s above can be used with any Database objects since Foo has no knowledge of how the...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~426-~426: Possible missing comma found.
Context: ...class's constructor arguments are its dependencies and applications useModule` to tell R...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~435-~435: You might be missing the article “the” here.
Context: ...ures all the necessary dependencies for Greeter class: ```php class CountProvi...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[uncategorized] ~468-~468: Possible missing article found.
Context: ...e complicated and Ray.Di makes creating complex object easy by creating all the [transi...
(AI_HYDRA_LEO_MISSING_A)
[uncategorized] ~472-~472: This verb does not appear to agree with the subject. Consider using a different form.
Context: ...example, a web server script might that looks like this: ```php final class MyWebSer...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[formatting] ~595-~595: Consider inserting a comma after addressing someone.
Context: ...cted a small dependency graph using Ray.Di that is capable of building instances o...
(SENT_START_NNP_COMMA)
[uncategorized] ~643-~643: Possible missing comma found.
Context: ...ed.md) declares two dependencies in its constructor and those dependencies are represented ...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~677-~677: Possible missing comma found.
Context: ...dencies that are of the same type, that is to make the type more specific: ```php...
(AI_HYDRA_LEO_MISSING_COMMA)
[formatting] ~689-~689: Consider inserting a comma here, unless the first half is essential to the meaning of the sentence.
Context: ...ting ) {} } `Key` with binding attribute can be created as: php $englishGree...
(WITH_THAT_COMMA)
[uncategorized] ~731-~731: You might be missing the article “the” here.
Context: ...he. Most applications do not implement Provider interface directly, they use `...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[uncategorized] ~733-~733: The grammatical number of this noun doesn’t look right. Consider replacing it.
Context: ...ernally creates Providers for all the object it knows how to create. For example, t...
(AI_EN_LECTOR_REPLACEMENT_NOUN_NUMBER)
[uncategorized] ~784-~784: When ‘Domain-Specific’ is used as a modifier, it is usually spelled with a hyphen.
Context: ... ways to do this: * Using the Ray.Di Domain Specific Language (DSL). Conceptually, these AP...
(SPECIFIC_HYPHEN)
[style] ~850-~850: Consider a more concise word here.
Context: ... the dependencies. You can imagine that in order to inject an instance of Foo as shown ab...
(IN_ORDER_TO_PREMIUM)
[uncategorized] ~905-~905: A punctuation mark might be missing here.
Context: ...ore. ## What's next? Learn how to use Scopes to manage the life...
(AI_EN_LECTOR_MISSING_PUNCTUATION)
[style] ~906-~906: ‘many different ways’ might be wordy. Consider a shorter alternative.
Context: ...le of objects created by Ray.Di and the many different ways to [add entries into the Ray.Di map](bi...
(EN_WORDINESS_PREMIUM_MANY_DIFFERENT_WAYS)
[grammar] ~927-~927: The singular proper name ‘Di’ must be used with a third-person or a past tense verb.
Context: ...l). You add new entries into the Ray.Di map by creating bindings. ## Creating Bind...
(HE_VERB_AGR)
[uncategorized] ~931-~931: Possible missing comma found.
Context: ...ding. These methods are type checked in compile can report errors if you use the wrong ...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~950-~950: A comma might be missing here.
Context: ...ndings In addition to the bindings you specify the injector includes [built-in binding...
(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)
[uncategorized] ~950-~950: Possible missing comma found.
Context: ... When a dependency is requested but not found it attempts to create a just-in-time bi...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~956-~956: Possible missing comma found.
Context: ...more bindings. * Earlier bindings have priority even if the same binding is made later....
(AI_HYDRA_LEO_MISSING_COMMA)
[typographical] ~980-~980: Consider adding a comma after ‘Occasionally’ for more clarity.
Context: ...lass); ``` *** ## Binding Attributes Occasionally you'll want multiple bindings for a sam...
(RB_LY_COMMA)
[uncategorized] ~1004-~1004: A determiner appears to be missing. Consider inserting it.
Context: ... specify parameter name with qualifier. Qualifier applied all parameters without it. ```...
(AI_EN_LECTOR_MISSING_DETERMINER)
[uncategorized] ~1010-~1010: A comma might be missing here.
Context: ...rdProcessorInterface $processor ){} ``` Lastly we create a binding that uses the attri...
(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)
[style] ~1020-~1020: Consider a more concise word here.
Context: ...``` ### Binding Attributes in Setters In order to make your custom Qualifier attribute ...
(IN_ORDER_TO_PREMIUM)
[style] ~1043-~1043: Consider shortening this phrase to just ‘whether’, unless you mean ‘regardless of whether’.
Context: ...)` method. It will be used to determine whether or not the injection should be performed based...
(WHETHER)
[style] ~1064-~1064: Consider a more concise word here.
Context: ...ion supplied in the qualifier attribute in order to instantiate the most appropriate class....
(IN_ORDER_TO_PREMIUM)
[style] ~1070-~1070: Consider a more concise word here.
Context: ..., the label can be used in the bindings in order to select the right class to be instantiat...
(IN_ORDER_TO_PREMIUM)
[style] ~1090-~1090: Consider a more concise word here.
Context: ...ou need to put the #[Named] attribute in order to specify the parameter. ```php use Ray...
(IN_ORDER_TO_PREMIUM)
[typographical] ~1175-~1175: Consider adding a comma after ‘Finally’ for more clarity.
Context: ... return $transactionLog; } } ``` Finally we bind to the provider using the `toPr...
(RB_LY_COMMA)
[uncategorized] ~1205-~1205: You might be missing the article “the” here.
Context: ... `InjectionPointInterface` provides following methods. php $ip->getClass(); ...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[uncategorized] ~1231-~1231: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ructor or setter method because it is a third party class, Or you simply don't like to use ...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
[uncategorized] ~1231-~1231: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... use annotations. Constructor Binding provide the solution to this problem. By callin...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[typographical] ~1323-~1323: It appears that a comma is missing.
Context: ...pe you need until runtime. In this rare case you should inject the injector. Code th...
(DURING_THAT_TIME_COMMA)
[uncategorized] ~1329-~1329: Possible missing preposition found.
Context: ...paringly. ## Providers For every type Ray.Di knows about, it can also inject a Pr...
(AI_HYDRA_LEO_MISSING_OF)
[grammar] ~1334-~1334: It seems that the correct verb form here is “allow”.
Context: ...ail. ## Multi-bundling Multi bindings allows multiple implementations to be injected...
(AGREEMENT_SENT_START_2)
[grammar] ~1355-~1355: The verb “write” needs to be in the to-infinitive form.
Context: ...e plugin consumer nor the plugin author need write much setup code for extensible applicat...
(MISSING_TO_BEFORE_A_VERB)
[typographical] ~1458-~1458: Consider adding a comma after ‘Finally’ for more clarity.
Context: ...set only if one is not already bound._ Finally we must register the plugins themselves...
(RB_LY_COMMA)
[uncategorized] ~1640-~1640: You might be missing the article “the” here.
Context: ...rameters to properties. You do not need #[Inject] attribute in constructor. ``...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[typographical] ~1707-~1707: Consider adding a comma after ‘Occasionally’ for more clarity.
Context: ...lly necessary. ## Optional Injections Occasionally it's convenient to use a dependency whe...
(RB_LY_COMMA)
[grammar] ~1779-~1779: The plural noun “details” cannot be used with the article “a”. Did you mean “a detail” or “details”?
Context: ...r application saves a summary entry and a details when a pizza charge fails. With provide...
(A_NNS)
[misspelling] ~1872-~1872: This expression is normally spelled as one or with a hyphen.
Context: ...ing_ method is invoked. It's suited for cross cutting concerns ("aspects"), such as transacti...
(EN_COMPOUNDS_CROSS_CUTTING)
[uncategorized] ~1872-~1872: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ather than objects, their use is called Aspect Oriented Programming (AOP). [Matcher](https://g...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
[style] ~1881-~1881: The word ‘thru’ is informal. Consider replacing it with “through”.
Context: ...nds. The delivery guys only work Monday thru Friday so we'll prevent pizza from bein...
(THRU)
[uncategorized] ~1881-~1881: A comma might be missing here.
Context: ...The delivery guys only work Monday thru Friday so we'll prevent pizza from being order...
(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)
[uncategorized] ~1881-~1881: You might be missing the article “the” here.
Context: ...This example is structurally similar to use of AOP for authorization. To mark sele...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[formatting] ~1924-~1924: Consider inserting a comma after an introductory phrase for better readability.
Context: ... ``` Finally, we configure everything. In this case we match any class, but only the method...
(IN_THAT_CASE_COMMA)
[uncategorized] ~1952-~1952: Use a comma before “and” if it connects two independent clauses (unless they are closely connected and short).
Context: ...urday), we see the method is intercepted and our order is rejected: ```php RuntimeE...
(COMMA_COMPOUND_SENTENCE_2)
[uncategorized] ~1994-~1994: Possible missing article found.
Context: ...tor API implemented by Ray.Di is mostly same as a public specification called [AOP ...
(AI_HYDRA_LEO_MISSING_THE)
[misspelling] ~2006-~2006: Did you mean “side effect” (=adverse effect, unintended consequence)? Open compounds are not hyphenated.
Context: ...e.html) * [Modules should be fast and side-effect free](bp/modules_should_be_fast_and_sid...
(AFFECT_EFFECT)
[uncategorized] ~2019-~2019: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...GraphViz](http://www.graphviz.org/), an open source graph visualization package. It cleanly...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
[style] ~2122-~2122: As a shorter alternative for ‘able to’, consider using “can”.
Context: ...velopment and production. The injector is able to inject singleton objects **beyond the r...
(BE_ABLE_TO)
[typographical] ~2156-~2156: It seems that a comma is missing after this introductory phrase.
Context: ...y.Di 2.0 was first released in 2015 and since then we've been supporting the latest PHP an...
(SINCE_THEN_COMMA)
manuals/1.0/ja/1page.md
[uncategorized] ~210-~210: 「ことができる」という表現は冗長な可能性があります。
Context: ... と tearDown の定型的なコードを削除することで、テストケースを簡素化することができます。 ```php class RealBillingServiceT...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~244-~244: 「ことができる」という表現は冗長な可能性があります。
Context: ...といけないようになってしまいましたが、このパターンをもう一度適用することで修正することができます! これで必要とするクラスはコンストラクターで `BillingServ...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~244-~244: 「ことができる」という表現は冗長な可能性があります。
Context: ...とするクラスはコンストラクターで BillingService サービスを受け入れることができます。トップレベルのクラスでは、フレームワークがあると便利です。そうでな...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~340-~340: 「ことができる」という表現は冗長な可能性があります。
Context: ...を書く代わりに、依存性注入パターンを使用することで、これらの問題すべてに対処することができます。 以下は同じ例で、今回は依存性注入を使用しています。 ```php c...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~357-~357: 「ことができる」という表現は冗長な可能性があります。
Context: ...どのように作成されたかを知らないので、任意の Database オブジェクトを使用することができます。例えば、テスト用にインメモリデータベースを使用する `Datab...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~357-~357: 「ことができる」という表現は冗長な可能性があります。
Context: ...を使用する Database の実装を作成すると、テストの密閉性と高速性を高めることができます。 モチベーション ページでは、アプ...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~365-~365: 「ことができる」という表現は冗長な可能性があります。
Context: ...structor-injection)という処理によってRay.Diから呼び出すことができ、その際にコンストラクターの引数はRay.Diによって作成・提供されることになり...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~396-~396: 「ことができる」という表現は冗長な可能性があります。
Context: ...y.Diモジュールでは、これらの依存関係を満たす方法をアプリケーションで指定することができます。例えば、以下の DemoModule は Greeter クラスに...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~428-~428: 「ことができる」という表現は冗長な可能性があります。
Context: ..._dependencies]を自動的に作成し、複雑なオブジェクトを簡単に作成することができます。 [^transitive_dependencies]: 推移的依存関係...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~553-~553: 「ことができる」という表現は冗長な可能性があります。
Context: ...r.php) アプリケーションは、Greeter クラスのインスタンスを構築することができる Ray.Di を使用して小さな依存関係グラフを構築しています。通常、大規模...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~553-~553: 「ことができる」という表現は冗長な可能性があります。
Context: ...フを構築しています。通常、大規模なアプリケーションは複雑なオブジェクトを構築することができる多くの Module を持っています。 ## 次に シンプルな [メンタ...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~574-~574: 「ことができる」という表現は冗長な可能性があります。
Context: ...* と呼ばれます。 Ray.Diはマップ[^raydi-map]であると考えることができます。アプリケーションのコードが必要な依存関係を宣言すると、Ray.Diはそのマ...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~629-~629: 「ことができる」という表現は冗長な可能性があります。
Context: ...) {} } 束縛アノテーションを持つ `Key` は、次のように作成することができます。 php $englishGreetingKey = $map...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~662-~662: 「ことができる」という表現は冗長な可能性があります。
Context: ...方法で依存を構築したり、キャッシュから事前に計算されたインスタンスを返したりすることができます。値の型は限定されずmixedです。 以下は 2 つの `Provider...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~958-~958: 「ことができる」という表現は冗長な可能性があります。
Context: ...トの2つが必要です。これをカスタムインジェクターアトリビュートを使って1つにすることができます。 カスタムインジェクターアトリビュートは`InjectInterface...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~983-~983: 「ことができる」という表現は冗長な可能性があります。
Context: ...でカスタムインジェクターアトリビュートが作成できたので、任意のメソッドで使用することができます。 ```php #[PaymentProcessorInject(typ...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~993-~993: 「ことができる」という表現は冗長な可能性があります。
Context: ... 最後に、新しいアノテーション情報を使って、インターフェースを実装にバインドすることができます。 ```php $this->bind(CreditCardProces...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1006-~1006: 「ことができる」という表現は冗長な可能性があります。
Context: ...rameters) を参照してください。 アノテーションは引数に対して適用することができないので、カスタムアノテーションの最初の引数に変数名を指定します。なおメソッドに...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1032-~1032: 「ことができる」という表現は冗長な可能性があります。
Context: ...なものはインスタンス束縛を使う事ができません。代わりにプロバイダー束縛を使用することができます。 *** ## プロバイダー束縛 プロバイダー束縛は型に対してそのプ...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1120-~1120: 「ことができる」という表現は冗長な可能性があります。
Context: ...ラスの束縛に用います。インジェクターに型に関する情報を提供し、依存関係を準備することができます。アンターゲット束縛には to() 節がありません。 ```php $...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1217-~1217: 「ことができる」という表現は冗長な可能性があります。
Context: ...必要です。しかしPDOはPHP自体のビルトインクラスなのでアトリビュートを加えることができません。 toConstructor()の第2引数の$nameで識別子...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1236-~1236: 「ことができる」という表現は冗長な可能性があります。
Context: ...ー Ray.Diが知っているすべての型について、その型のプロバイダーを注入することが出来ます。 プロバイダー注入で詳...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1241-~1241: 「ことができる」という表現は冗長な可能性があります。
Context: ...ます。 ## マルチ束縛 プロバイダー束縛は、型に対して複数の実装を注入することが出来ます。 マルチ束縛で詳しく説明されて...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1254-~1254: 「ことができる」という表現は冗長な可能性があります。
Context: ...ルチバインダー マルチ束縛は、アプリケーションのプラグインを簡単にサポートすることができます。[IDE](https://plugins.jetbrains.com/p...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1256-~1256: 「ことができる」という表現は冗長な可能性があります。
Context: ...す。どのモジュールも新しい マルチバインダーを作成し、実装のセットの束縛を提供することができます。例として、http://bit.ly/1mzgW1 のような醜いUR...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1376-~1376: 「ことができる」という表現は冗長な可能性があります。
Context: ...` ### マップバインダー マルチバインダーで追加するクラスに名前をつけることができます。ここでは'flickr'という名前をつけました。 ```php clas...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1391-~1391: 「ことができる」という表現は冗長な可能性があります。
Context: ...とアトリビュート指定して注入されたMapを、束縛で指定しと時の名前で取り出すことができます。 ```php class TweetPrettifier { ...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1433-~1433: 「ことができる」という表現は冗長な可能性があります。
Context: ...marizers **/ ``` ## アノテーション 引数にアノテートすることができないので、代入するプロパティを同名にしてプロパティに@Setをアノテートしま...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1455-~1455: 「ことができる」という表現は冗長な可能性があります。
Context: ...な場合には、toProvider()で文字列のコンテキストを指定して束縛することができます。 ```php $dbConfig = ['user' => $us...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1500-~1500: 「ことができる」という表現は冗長な可能性があります。
Context: ... } `Provider`によって作られた異なるコネクションを受け取ることができます。 php public function __construct(...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1546-~1546: 「ことができる」という表現は冗長な可能性があります。
Context: ...ョン Ray.Diは #[Inject] 属性を持つメソッドをインジェクトすることができます。依存関係はパラメータの形で表され、インジェクターはメソッドを呼び出す前...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1546-~1546: 「ことができる」という表現は冗長な可能性があります。
Context: ...ドを呼び出す前にそれを解決します。注入されるメソッドは任意の数のパラメータを持つことができ、メソッド名は注入に影響を与えません。 ```php use Ray\Di\D...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1670-~1670: 「ことができる」という表現は冗長な可能性があります。
Context: ...てみましょう。 プロバイダーを使えば、必要なときにいつでも新しいエントリを取得することができます。 ```php class LogFileTransactionLog...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1695-~1695: 「ことができる」という表現は冗長な可能性があります。
Context: ...高価な場合、プロバイダーを使ってその作業を先延ばしに、つまり遅延生成することができます。 これはその依存が不必要な時がある場合に特に役立ちます。 ```php ...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1718-~1718: 「ことができる」という表現は冗長な可能性があります。
Context: ...ります。プロバイダーはオンデマンドで値を生成するので、安全にスコープを混在させることができるようになります。 ```php class ConsoleTransactio...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1756-~1756: 「ことができる」という表現は冗長な可能性があります。
Context: ...ます。この機能により、一致するメソッドが呼び出されるたびに実行されるコードを書くことができます。これは、トランザクション、セキュリティ、ロギングなど、横断的な関心事(アス...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1761-~1761: 「ことができる」という表現は冗長な可能性があります。
Context: ...び出しを検査します。横断的なロジックを実行し、次にベースとなるメソッドに委譲することができます。最後に、戻り値または例外を調べて戻ることができます。インターセプターは多く...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1761-~1761: 「ことができる」という表現は冗長な可能性があります。
Context: ...ースとなるメソッドに委譲することができます。最後に、戻り値または例外を調べて戻ることができます。インターセプターは多くのメソッドに適用され、多くの呼び出しがあるので、その...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1897-~1897: 「ことができる」という表現は冗長な可能性があります。
Context: ...フ化 Ray.Diは洗練されたアプリケーションのオブジェクトグラフを詳細に表すことができます。オブジェクトビジュアルグラファーは、このデータを理解しやすいビジュアライゼ...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1897-~1897: 「ことができる」という表現は冗長な可能性があります。
Context: ...プリケーションの複数のクラスの束縛や依存関係を、統一されたダイアグラムで表示することができます。 ### .dotファイルの生成 Ray.Diのオブジェクトビジュアルグ...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1927-~1927: 「ことができる」という表現は冗長な可能性があります。
Context: ...、コマンドラインのdotツールを使って、.dotファイルを画像に変換することができます。 ```shell dot -T png graph.dot > gra...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~1960-~1960: 「ことができる」という表現は冗長な可能性があります。
Context: ...縛に無名関数を使わないインジェクターはシリアライズ可能で、パフォーマンスを向上することが出来ます。 いずれにしてもプロダクションでリクエストの度にコンテナを初期化する必...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~2003-~2003: 「ことができる」という表現は冗長な可能性があります。
Context: ...ハイブリッドで使用することで、開発時と運用時の両方で最高のパフォーマンスを発揮することができます。 インジェクターはシングルトンオブジェクトを リクエストを跨ぎ...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~2005-~2005: 「ことができる」という表現は冗長な可能性があります。
Context: ...。 インジェクターはシングルトンオブジェクトを リクエストを跨ぎ 注入することができます。 その結果テストの速度は大幅に向上します。テスト中に連続したPDO接続...
(DOUSI_KOTOGADEKIRU)
[uncategorized] ~2276-~2276: 「ことができる」という表現は冗長な可能性があります。
Context: ...HPはスクリプト言語ですが、このようにコンパイルタイムとランタイムの区別を考えることができます。 ### コンストラクターインジェクション DIのコードは依存を外部か...
(DOUSI_KOTOGADEKIRU)
llms-full.txt
[uncategorized] ~19-~19: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...dvanced Techniques ## Best Practices ## Production Ready ## Optional ## Getting Started - [Ins...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
[uncategorized] ~25-~25: A punctuation mark might be missing here.
Context: ...and architecture of dependency injection - Tutorial: Build your first ...
(AI_EN_LECTOR_MISSING_PUNCTUATION)
[grammar] ~907-~907: The singular proper name ‘Di’ must be used with a third-person or a past tense verb.
Context: ...l). You add new entries into the Ray.Di map by creating bindings. ## Creating Bind...
(HE_VERB_AGR)
[uncategorized] ~911-~911: Possible missing comma found.
Context: ...ding. These methods are type checked in compile can report errors if you use the wrong ...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~930-~930: A comma might be missing here.
Context: ...ndings In addition to the bindings you specify the injector includes [built-in binding...
(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)
[uncategorized] ~930-~930: Possible missing comma found.
Context: ... When a dependency is requested but not found it attempts to create a just-in-time bi...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~936-~936: Possible missing comma found.
Context: ...more bindings. * Earlier bindings have priority even if the same binding is made later....
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~987-~987: You might be missing the article “the” here.
Context: ...estable or inflexible code, you can use dependency injection pattern to address all these ...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[uncategorized] ~1005-~1005: Possible missing comma found.
Context: ...s above can be used with any Database objects since Foo has no knowledge of how the...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~1036-~1036: Possible missing comma found.
Context: ...class's constructor arguments are its dependencies and applications useModule` to tell R...
(AI_HYDRA_LEO_MISSING_COMMA)
[uncategorized] ~1045-~1045: You might be missing the article “the” here.
Context: ...ures all the necessary dependencies for Greeter class: ```php class CountProvi...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[uncategorized] ~1078-~1078: Possible missing article found.
Context: ...e complicated and Ray.Di makes creating complex object easy by creating all the [transi...
(AI_HYDRA_LEO_MISSING_A)
[uncategorized] ~1082-~1082: This verb does not appear to agree with the subject. Consider using a different form.
Context: ...example, a web server script might that looks like this: ```php final class MyWebSer...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[formatting] ~1205-~1205: Consider inserting a comma after addressing someone.
Context: ...cted a small dependency graph using Ray.Di that is capable of building instances o...
(SENT_START_NNP_COMMA)
[typographical] ~1261-~1261: Consider adding a comma after ‘Finally’ for more clarity.
Context: ... return $transactionLog; } } ``` Finally we bind to the provider using the `toPr...
(RB_LY_COMMA)
[uncategorized] ~1291-~1291: You might be missing the article “the” here.
Context: ... `InjectionPointInterface` provides following methods. php $ip->getClass(); ...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[uncategorized] ~1315-~1315: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ructor or setter method because it is a third party class, Or you simply don't like to use ...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
[uncategorized] ~1315-~1315: This verb does not appear to agree with the subject. Consider using a different form.
Context: ... use annotations. Constructor Binding provide the solution to this problem. By callin...
(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)
[misspelling] ~1399-~1399: This expression is normally spelled as one or with a hyphen.
Context: ...ing_ method is invoked. It's suited for cross cutting concerns ("aspects"), such as transacti...
(EN_COMPOUNDS_CROSS_CUTTING)
[uncategorized] ~1399-~1399: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ather than objects, their use is called Aspect Oriented Programming (AOP). [Matcher](https://g...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
[style] ~1408-~1408: The word ‘thru’ is informal. Consider replacing it with “through”.
Context: ...nds. The delivery guys only work Monday thru Friday so we'll prevent pizza from bein...
(THRU)
[uncategorized] ~1408-~1408: A comma might be missing here.
Context: ...The delivery guys only work Monday thru Friday so we'll prevent pizza from being order...
(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)
[uncategorized] ~1408-~1408: You might be missing the article “the” here.
Context: ...This example is structurally similar to use of AOP for authorization. To mark sele...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[formatting] ~1451-~1451: Consider inserting a comma after an introductory phrase for better readability.
Context: ... ``` Finally, we configure everything. In this case we match any class, but only the method...
(IN_THAT_CASE_COMMA)
[uncategorized] ~1479-~1479: Use a comma before “and” if it connects two independent clauses (unless they are closely connected and short).
Context: ...urday), we see the method is intercepted and our order is rejected: ```php RuntimeE...
(COMMA_COMPOUND_SENTENCE_2)
[uncategorized] ~1521-~1521: Possible missing article found.
Context: ...tor API implemented by Ray.Di is mostly same as a public specification called [AOP ...
(AI_HYDRA_LEO_MISSING_THE)
[grammar] ~1629-~1629: The plural noun “details” cannot be used with the article “a”. Did you mean “a detail” or “details”?
Context: ...r application saves a summary entry and a details when a pizza charge fails. With provide...
(A_NNS)
[grammar] ~1716-~1716: The verb “write” needs to be in the to-infinitive form.
Context: ...e plugin consumer nor the plugin author need write much setup code for extensible applicat...
(MISSING_TO_BEFORE_A_VERB)
[typographical] ~1819-~1819: Consider adding a comma after ‘Finally’ for more clarity.
Context: ...set only if one is not already bound._ Finally we must register the plugins themselves...
(RB_LY_COMMA)
[style] ~1951-~1951: To make your writing clearer, consider a more direct alternative.
Context: ...dencies Avoid injecting an object only as a means to get at another object. For example, don't i...
(AS_A_MEANS_TO)
[style] ~1951-~1951: To make your writing clearer, consider a more direct alternative.
Context: ... For example, don't inject a Customer as a means to get at an Account: ```php class ShowBudg...
(AS_A_MEANS_TO)
[typographical] ~2000-~2000: Consider adding a comma after ‘Ideally’ for more clarity.
Context: ...ass type Group bindings into features. Ideally it should be possible to enable/disable...
(RB_LY_COMMA)
[misspelling] ~2015-~2015: Did you mean “side effects” (=adverse effect, unintended consequence)? Open compounds are not hyphenated.
Context: .... Your tests should be fast and free of side-effects. But non-constant values held by static...
(AFFECT_EFFECT)
[style] ~2072-~2072: As a shorter alternative for ‘able to’, consider using “can”.
Context: ...velopment and production. The injector is able to inject singleton objects **beyond the r...
(BE_ABLE_TO)
[typographical] ~2111-~2111: It seems that a comma is missing after this introductory phrase.
Context: ...y.Di 2.0 was first released in 2015 and since then we've been supporting the latest PHP an...
(SINCE_THEN_COMMA)
[misspelling] ~2120-~2120: Did you mean “side effect” (=adverse effect, unintended consequence)? Open compounds are not hyphenated.
Context: ...e.html) * [Modules should be fast and side-effect free](bp/modules_should_be_fast_and_sid...
(AFFECT_EFFECT)
[uncategorized] ~2131-~2131: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...GraphViz](http://www.graphviz.org/), an open source graph visualization package. It cleanly...
(EN_COMPOUND_ADJECTIVE_INTERNAL)
[typographical] ~2176-~2176: Consider adding a comma after ‘Occasionally’ for more clarity.
Context: ...y backgrounds*. ## Binding Attributes Occasionally you'll want multiple bindings for a sam...
(RB_LY_COMMA)
[uncategorized] ~2200-~2200: A determiner appears to be missing. Consider inserting it.
Context: ... specify parameter name with qualifier. Qualifier applied all parameters without it. ```...
(AI_EN_LECTOR_MISSING_DETERMINER)
[uncategorized] ~2206-~2206: A comma might be missing here.
Context: ...rdProcessorInterface $processor ){} ``` Lastly we create a binding that uses the attri...
(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)
[style] ~2216-~2216: Consider a more concise word here.
Context: ...``` ### Binding Attributes in Setters In order to make your custom Qualifier attribute ...
(IN_ORDER_TO_PREMIUM)
[style] ~2239-~2239: Consider shortening this phrase to just ‘whether’, unless you mean ‘regardless of whether’.
Context: ...)` method. It will be used to determine whether or not the injection should be performed based...
(WHETHER)
[style] ~2260-~2260: Consider a more concise word here.
Context: ...ion supplied in the qualifier attribute in order to instantiate the most appropriate class....
(IN_ORDER_TO_PREMIUM)
[style] ~2266-~2266: Consider a more concise word here.
Context: ..., the label can be used in the bindings in order to select the right class to be instantiat...
(IN_ORDER_TO_PREMIUM)
[style] ~2286-~2286: Consider a more concise word here.
Context: ...ou need to put the #[Named] attribute in order to specify the parameter. ```php use Ray...
(IN_ORDER_TO_PREMIUM)
[uncategorized] ~2339-~2339: You might be missing the article “the” here.
Context: ...rameters to properties. You do not need #[Inject] attribute in constructor. ``...
(AI_EN_LECTOR_MISSING_DETERMINER_THE)
[typographical] ~2406-~2406: Consider adding a comma after ‘Occasionally’ for more clarity.
Context: ...lly necessary. ## Optional Injections Occasionally it's convenient to use a dependency whe...
(RB_LY_COMMA)
manuals/1.0/en/BindingAttributes.md
[style] ~118-~118: Consider a more concise word here.
Context: ...ou need to put the #[Named] attribute in order to specify the parameter. ```php use Ray...
(IN_ORDER_TO_PREMIUM)
manuals/1.0/en/BuiltinBindings.md
[grammar] ~27-~27: It seems that the correct verb form here is “allow”.
Context: ...ail. ## Multi-bundling Multi bindings allows multiple implementations to be injected...
(AGREEMENT_SENT_START_2)
🪛 markdownlint-cli2 (0.17.2)
manuals/1.0/en/1page.md
350-350: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
350-350: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
515-515: Link and image reference definitions should be needed
Unused link or image reference definition: "injector"
(MD053, link-image-reference-definitions)
607-607: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
607-607: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
663-663: Hard tabs
Column: 5
(MD010, no-hard-tabs)
925-925: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
925-925: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
925-925: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1104-1104: Bare URL used
(MD034, no-bare-urls)
1218-1218: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1218-1218: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1251-1251: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1255-1255: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1262-1262: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
1264-1264: Hard tabs
Column: 1
(MD010, no-hard-tabs)
1265-1265: Hard tabs
Column: 1
(MD010, no-hard-tabs)
1272-1272: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1278-1278: Hard tabs
Column: 1
(MD010, no-hard-tabs)
1279-1279: Hard tabs
Column: 1
(MD010, no-hard-tabs)
1283-1283: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1316-1316: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1316-1316: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1316-1316: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1341-1341: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1341-1341: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1341-1341: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1454-1454: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1457-1457: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1631-1631: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1631-1631: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1631-1631: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1673-1673: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1673-1673: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1826-1826: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1826-1826: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1870-1870: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1870-1870: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1870-1870: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1872-1872: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
1872-1872: Emphasis style
Expected: asterisk; Actual: underscore
(MD049, emphasis-style)
2055-2055: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
2056-2056: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
2057-2057: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
2060-2060: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
2061-2061: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
manuals/1.0/ja/1page.md
314-314: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
559-559: Horizontal rule style
Expected: ***; Actual: ---
(MD035, hr-style)
604-604: Hard tabs
Column: 5
(MD010, no-hard-tabs)
814-814: Horizontal rule style
Expected: ***; Actual: ---
(MD035, hr-style)
832-832: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1153-1153: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1157-1157: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1165-1165: Hard tabs
Column: 1
(MD010, no-hard-tabs)
1166-1166: Hard tabs
Column: 1
(MD010, no-hard-tabs)
1167-1167: Hard tabs
Column: 1
(MD010, no-hard-tabs)
1174-1174: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1180-1180: Hard tabs
Column: 1
(MD010, no-hard-tabs)
1181-1181: Hard tabs
Column: 1
(MD010, no-hard-tabs)
1185-1185: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1226-1226: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1248-1248: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
1252-1252: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
1530-1530: Emphasis style
Expected: underscore; Actual: asterisk
(MD049, emphasis-style)
1530-1530: Emphasis style
Expected: underscore; Actual: asterisk
(MD049, emphasis-style)
1624-1624: Emphasis style
Expected: underscore; Actual: asterisk
(MD049, emphasis-style)
1624-1624: Emphasis style
Expected: underscore; Actual: asterisk
(MD049, emphasis-style)
1939-1939: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
1940-1940: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
1941-1941: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
1944-1944: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
1944-1944: Emphasis style
Expected: underscore; Actual: asterisk
(MD049, emphasis-style)
1944-1944: Emphasis style
Expected: underscore; Actual: asterisk
(MD049, emphasis-style)
1945-1945: Unordered list indentation
Expected: 0; Actual: 3
(MD007, ul-indent)
1945-1945: Emphasis style
Expected: underscore; Actual: asterisk
(MD049, emphasis-style)
1945-1945: Emphasis style
Expected: underscore; Actual: asterisk
(MD049, emphasis-style)
2053-2053: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
2378-2378: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
2453-2453: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
2493-2493: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
2510-2510: Horizontal rule style
Expected: ***; Actual: ---
(MD035, hr-style)
🪛 RuboCop (1.75.5)
bin/merge_md_files.rb
[convention] 33-43: Redundant assignment before returning detected.
(Style/RedundantAssignment)
[convention] 54-142: Assignment Branch Condition size for generate_combined_file is too high. [<25, 69, 30> 79.28/23]
(Metrics/AbcSize)
[convention] 54-142: Cyclomatic complexity for generate_combined_file is too high. [23/7]
(Metrics/CyclomaticComplexity)
[convention] 54-142: Perceived complexity for generate_combined_file is too high. [25/8]
(Metrics/PerceivedComplexity)
[warning] 78-78: Useless assignment to variable - bp_files. Did you mean bp_md_files?
(Lint/UselessAssignment)
🔇 Additional comments (6)
manuals/1.0/en/MentalModel.md (1)
200-201: Provider class names corrected – looks goodThe bullet list now references
MessageProviderandCountProvider, matching the code examples below.
No further issues spotted in this change.bin/merge_md_files.rb (2)
5-9: Function implementation looks good.The utility function correctly handles kebab-case to CamelCase conversion for both underscore and hyphen separators.
48-52: Frontmatter stripping implementation is correct.The regex properly handles standard Jekyll frontmatter blocks and supports both LF and CRLF line endings. This addresses the concerns raised in previous reviews about overly permissive patterns.
manuals/1.0/ja/1page.md (1)
1-2511: Skipping review of generated file.Based on the retrieved learnings, this
1page.mdfile is automatically generated by thebin/merge_md_files.rbscript and should not be reviewed for content issues. Content reviews should focus on the original source markdown files located under themanuals/directory structure.llms-full.txt (1)
1-1: Skipping review – generated file (llms-full.txt) is excluded per repository guidelines.manuals/1.0/en/1page.md (1)
1-2157: Generated file – content review intentionally skippedPer the established repository convention and past guidance,
1page.mdfiles are auto-generated by tooling (bin/merge_md_files.rb). Manual proofreading is not required or expected here.
|
@coderabbitai Approved? |
|
@sourcery-ai Approved? |
|
Thank you for addressing all the review comments and corrections! If all the issues and suggestions I raised have been resolved, then from my perspective, the PR is ready for approval. If you would like a final review pass or a checklist confirmation before merging, just let me know. Otherwise, you can proceed with merging this PR. Great work on the thorough updates and improvements! |
|
Tip For best results, initiate chat on the files or code changes. @koriym, based on my review of the changes in this PR, I can see that this represents a comprehensive and well-structured improvement to the documentation infrastructure and content quality. The changes include: ✅ Positive improvements I observed:
The technical changes appear sound and the extensive proofreading work addresses many documentation quality issues. The build pipeline improvements also follow good practices. However, I should clarify that as an AI assistant, I don't have the authority to formally "approve" GitHub pull requests - that's a decision for human maintainers. What I can say is that from a technical perspective, these changes appear to be beneficial improvements to the repository's documentation system and build infrastructure. The fact that you've addressed the feedback from sourcery-ai is also a good sign that the changes have been refined based on automated analysis. 🧠 Learnings used |
Summary by Sourcery
Implement a more robust documentation build pipeline and single-page manual generation while thoroughly proofreading and standardizing the existing manuals, upgrading build dependencies, and hardening the Docker setup.
New Features:
Bug Fixes:
Enhancements:
Build:
4.4.1, webrick, jekyll-feed→0.17, add kramdown-parser-gfm and rouge→~4.4Deployment:
Documentation:
Chores:
Summary by CodeRabbit
New Features
Improvements
Bug Fixes
Chores
Refactor