Skip to content

Conversation

@dogancanbakir
Copy link
Member

@dogancanbakir dogancanbakir commented Jan 3, 2026

closes #2350

Summary by CodeRabbit

  • Improvements
    • Enhanced resolver configuration file parsing to support comma-separated values in resolver entries and improved whitespace handling for cleaner configuration syntax.

✏️ Tip: You can customize this high-level summary in your review settings.

@dogancanbakir dogancanbakir self-assigned this Jan 3, 2026
@auto-assign auto-assign bot requested a review from Mzack9999 January 3, 2026 15:46
@coderabbitai
Copy link

coderabbitai bot commented Jan 3, 2026

Walkthrough

The change improves resolver file parsing in runner/options.go by trimming whitespace from lines and intelligently handling comma-separated resolver values. Lines containing commas are split and added as individual resolvers, while single-value lines are processed as complete entries.

Changes

Cohort / File(s) Summary
Resolver parsing enhancement
runner/options.go
Modified resolver file reading logic to trim whitespace from lines, split comma-separated values into individual resolvers, and filter empty entries. Replaces previous behavior that appended raw, untrimmed lines.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~8 minutes

Poem

🐰 A comma here, a trim there,
Resolvers now read with proper care,
No more lost addresses in the fray,
Your DNS queries find their way! 🎯

Pre-merge checks and finishing touches

✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'fix resolver parsing' directly matches the primary change in the PR, which enhances resolver file parsing to handle commas and trimming.
Linked Issues check ✅ Passed The code change implements resolver file parsing with comma splitting and line trimming, directly addressing issue #2350's inconsistent resolver parsing behavior across different path types.
Out of Scope Changes check ✅ Passed All changes in runner/options.go are focused on resolver parsing logic and remain within the scope of fixing the resolver file handling issue #2350.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0cbc12b and 8222571.

📒 Files selected for processing (1)
  • runner/options.go
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
  • GitHub Check: Test Builds (macOS-latest)
  • GitHub Check: Test Builds (windows-latest)
  • GitHub Check: Test Builds (ubuntu-latest)
  • GitHub Check: Functional Test (ubuntu-latest)
  • GitHub Check: Functional Test (windows-latest)
  • GitHub Check: Functional Test (macOS-latest)
  • GitHub Check: Analyze (go)
  • GitHub Check: release-test
🔇 Additional comments (2)
runner/options.go (2)

737-748: Good enhancement to resolver file parsing flexibility.

The addition of whitespace trimming and comma-separated value splitting makes the resolver file parser more robust and user-friendly. It now handles multiple resolver formats gracefully.


740-740: No action required. The project's go.mod specifies Go 1.24.1, which fully supports strings.SplitSeq (introduced in Go 1.23). The code is compatible with the project's minimum Go version.

Comment on lines 737 to +748
for line := range chFile {
resolvers = append(resolvers, line)
line = strings.TrimSpace(line)
if line != "" && strings.Contains(line, ",") {
for item := range strings.SplitSeq(line, ",") {
item = strings.TrimSpace(item)
if item != "" {
resolvers = append(resolvers, item)
}
}
} else {
resolvers = append(resolvers, line)
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix empty line handling in resolver parsing.

The else branch (line 747) appends the trimmed line regardless of whether it's empty. This occurs because the condition on line 739 only checks line != "" for the comma-splitting case. Empty lines or whitespace-only lines will fall through to the else branch and be added as empty strings to the resolvers list.

🔎 Proposed fix
 			for line := range chFile {
 				line = strings.TrimSpace(line)
 				if line != "" && strings.Contains(line, ",") {
 					for item := range strings.SplitSeq(line, ",") {
 						item = strings.TrimSpace(item)
 						if item != "" {
 							resolvers = append(resolvers, item)
 						}
 					}
-				} else {
+				} else if line != "" {
 					resolvers = append(resolvers, line)
 				}
 			}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
for line := range chFile {
resolvers = append(resolvers, line)
line = strings.TrimSpace(line)
if line != "" && strings.Contains(line, ",") {
for item := range strings.SplitSeq(line, ",") {
item = strings.TrimSpace(item)
if item != "" {
resolvers = append(resolvers, item)
}
}
} else {
resolvers = append(resolvers, line)
}
for line := range chFile {
line = strings.TrimSpace(line)
if line != "" && strings.Contains(line, ",") {
for item := range strings.SplitSeq(line, ",") {
item = strings.TrimSpace(item)
if item != "" {
resolvers = append(resolvers, item)
}
}
} else if line != "" {
resolvers = append(resolvers, line)
}
}
🤖 Prompt for AI Agents
In runner/options.go around lines 737 to 748, the else branch will append empty
or whitespace-only lines to resolvers because only the comma-splitting branch
checks line != ""; update the logic to skip empty lines before appending by
ensuring you only append when line != "" (e.g., continue if line == ""), and
keep the existing comma-splitting behavior so that trimmed, non-empty split
items are still appended.

}
for line := range chFile {
resolvers = append(resolvers, line)
line = strings.TrimSpace(line)
Copy link
Member

Choose a reason for hiding this comment

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

The issue seems unrelated to the file parsing, but rather to the file not existing on the file system (I guess maybe a typo from the user), as in fact it gets appended to the slice directly (previous line 741). The resolver file format (one resolver per line) is common to all tools, if we want to support comma separated resolvers on the same line within file, maybe we should move this to utils. What do you think?

Copy link
Member Author

Choose a reason for hiding this comment

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

It makes sense. I'll open an issue in utils to track this.

Copy link
Member Author

Choose a reason for hiding this comment

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

Also, just asked user to check the path and it seem this isn't a path issue #2350 (comment)

Copy link
Member

Choose a reason for hiding this comment

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

looks like the issue persists even with this change. For some reason the path lead to a non-existing file check. Maybe we can try to enforce additional checks on the resolver arguments (ex. presence of \ or /) which are prohibited as qualified domain name, and warning out the user and using default resolvers in case or erroring out since a resolver file was requested (ex. curl has hard fail when -dns-server is used and fails, without automatic fallbacks, but maybe we should be more fault tolerant and ease automation). What do you think?

Copy link
Member

@Mzack9999 Mzack9999 left a comment

Choose a reason for hiding this comment

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

suggested approch

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

-r flag fails silently in certain circumstances

3 participants