Skip to content
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

Minor fixes: debug logs, restructuring ifs, fix is_func_in_hunk #192

Merged
merged 2 commits into from
Oct 14, 2024

Conversation

tapishr
Copy link
Member

@tapishr tapishr commented Oct 14, 2024

Please check the action items covered in the PR -

  • Build is running
  • Eventing is functional and tested
  • Unit or integration tests added and running
  • Manual QA

Summary by CodeRabbit

  • New Features

    • Added a new environment variable LOG_LEVEL set to Debug in deployment configurations.
    • Updated package version from 2.0.3 to 2.0.4.
  • Improvements

    • Enhanced logging capabilities for better debugging across various functionalities, including function calls and API interactions.
    • Streamlined function call processing and error handling in the graph representation.
  • Bug Fixes

    • Corrected error messages in logging for improved context clarity.

Copy link
Contributor

coderabbitai bot commented Oct 14, 2024

Walkthrough

The pull request introduces several changes across multiple files, primarily focusing on enhancing logging capabilities and modifying data structures for improved functionality. A new environment variable, LOG_LEVEL, is added to the deployment script, while the Cargo.toml file reflects a version increment. Significant updates in the file_imports.rs, function_call.rs, and function_name.rs files enhance the handling of input/output schemas and function call identification through added logging and new data structures. Additionally, various methods are updated to improve their functionality and observability.

Changes

File Path Change Summary
user-deploy-cloud-pat-script.sh Added LOG_LEVEL environment variable with value Debug and corrected indentation in YAML.
vibi-dpu/Cargo.toml Updated package version from 2.0.3 to 2.0.4.
vibi-dpu/src/graph/file_imports.rs Introduced new structs for input/output schemas and added asynchronous methods for import paths. Removed commented-out code.
vibi-dpu/src/graph/function_call.rs Added debug logging to functions_in_file and functions_in_hunks methods for better traceability. Updated method signatures.
vibi-dpu/src/graph/function_name.rs Added debug logging to function_name_in_line method for input/output traceability.
vibi-dpu/src/graph/gitops.rs Updated is_func_in_hunks method to accept edge_color parameter for improved functionality.
vibi-dpu/src/graph/graph_edges.rs Enhanced logging and error handling in incoming_edges and outgoing_edges. Restructured process_func_calls for clarity.
vibi-dpu/src/graph/utils.rs Added debug logging in call_llm_api and read_file functions for better error visibility.

Possibly related PRs

  • Minor fixes: strip json response from llm #189: The changes in this PR involve modifications to the file_imports.rs file, which includes updates to the get_import_path method that may relate to logging and configuration aspects similar to the changes made in the user-deploy-cloud-pat-script.sh regarding environment variables and logging levels.

Poem

In the code where rabbits hop,
New logs and levels help us stop.
With paths and imports, clear and bright,
We trace our steps from day to night.
Debugging's fun, with hops and skips,
In our code, we make our trips! 🐇✨


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

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

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

CodeRabbit Commands (Invoked using PR comments)

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

Other keywords and placeholders

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

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

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

Copy link

vibinex-dpu bot commented Oct 14, 2024

Relevant users for this PR:

Contributor Name/Alias Relevance
tapishr 100.00%

Ignoring following files due to large size: - vibi-dpu/src/graph/file_imports.rs

  • vibi-dpu/src/graph/function_name.rs

Auto assigning to relevant reviewers.

If you are a relevant reviewer, you can use the Vibinex browser extension to see parts of the PR relevant to you
Relevance of the reviewer is calculated based on the git blame information of the PR. To know more, hit us up at contact@vibinex.com.

To change comment and auto-assign settings, go to your Vibinex settings page.

Copy link

sonarcloud bot commented Oct 14, 2024

Copy link

vibinex-dpu bot commented Oct 14, 2024

Diff Graph:

Call Stack Diff

%%{init: { 'theme': 'neutral', 'themeVariables': { 'fontSize': '20px' }, 'flowchart': { 'nodeSpacing': 100, 'rankSpacing': 100 } } }%%
 	flowchart LR

	classDef modified stroke:black,fill:yellow
	classDef added stroke:black,fill:#b7e892,color:black
	classDef deleted stroke:black,fill:red

Loading

To modify DiffGraph settings, go to your Vibinex settings page.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🧹 Outside diff range and nitpick comments (5)
user-deploy-cloud-pat-script.sh (1)

Line range hint 1-43: Overall script review: Consider enhancing error handling and documentation

After reviewing the entire script, here are some additional observations and suggestions for improvement:

  1. Error Handling: The script uses set -e, which is good for failing fast. However, consider adding more specific error messages for different failure scenarios.

  2. Documentation: The script lacks comments explaining its overall purpose and the significance of each environment variable. Adding a brief description at the beginning of the script would improve maintainability.

  3. Security: The script directly uses $_GITHUB_PAT as an environment variable. Consider using Kubernetes secrets for sensitive information like PATs.

  4. Naming Convention: The script name user-deploy-cloud-pat-script.sh is quite long and not very descriptive. Consider renaming it to something more concise and meaningful, e.g., deploy-dpu.sh.

Here's an example of how you could improve the script header:

#!/bin/bash
set -e

# Deploy Data Processing Unit (DPU) to Cloud Environment
#
# This script generates a Kubernetes deployment YAML file and deploys
# a DPU container to a specified cloud environment.
#
# Required Environment Variables:
# - PROJECT_ID: The GCP project ID
# - SHORT_SHA: The short SHA of the commit being deployed
# - _USER_ID: The user ID associated with this deployment
# - _INSTALL_ID: The installation ID for the DPU
# - _GITHUB_PAT: GitHub Personal Access Token (consider using K8s secrets)
# - _PROVIDER: The cloud provider for this deployment
# - _LOG_LEVEL: The logging level for the DPU (e.g., Debug, Info, Warn, Error)

# Ensure required variables are set
required_vars=("PROJECT_ID" "SHORT_SHA" "_USER_ID" "_INSTALL_ID" "_GITHUB_PAT" "_PROVIDER" "_LOG_LEVEL")
for var in "${required_vars[@]}"; do
    if [ -z "${!var}" ]; then
        echo "Error: $var is not set."
        exit 1
    fi
done

# ... rest of the script ...

These changes would significantly improve the script's readability, maintainability, and robustness.

vibi-dpu/src/graph/function_name.rs (2)

107-107: LGTM: Useful debug logging added, with a minor suggestion

The addition of this debug log statement is valuable. It provides visibility into the deserialized func_name object, which is crucial for debugging and verifying the API response.

Consider logging only essential fields of func_name instead of the entire object to reduce log verbosity. For example:

log::debug!("[FunctionNameIdentifier/function_name_in_line] func_name: {}, notes: {:?}", func_name.function_name, func_name.notes);

This approach provides the necessary information while keeping the logs concise.


Line range hint 1-111: Overall assessment: Improved debugging with minimal changes

The changes made to this file enhance its debugging capabilities without altering the core functionality. The addition of two strategically placed debug log statements improves the traceability of the function_name_in_line method, which will be beneficial for troubleshooting and development.

Consider implementing a more structured logging approach across the codebase, such as using a logging facade like log with a configurable backend. This would allow for consistent logging patterns and easy adjustment of log levels in different environments.

vibi-dpu/src/graph/graph_edges.rs (2)

106-106: Remove unnecessary newline character in debug log

The debug log at line 106 includes a newline character \n within the format string, which may result in less readable logs. Consider removing it to maintain consistent log formatting.

Apply this diff to adjust the debug log:

-log::debug!("[process_func_calls] file name: {}\n, diff_hunks: {:?}, edge: {}", &source_file_name, diff_hunks, edge_color);
+log::debug!("[process_func_calls] file name: {}, diff_hunks: {:?}, edge: {}", &source_file_name, diff_hunks, edge_color);

149-149: Address the TODO regarding git checkout

At line 149, there's a TODO comment: // TODO - see if git checkout is needed. This should be resolved to ensure the codebase remains clean and all necessary steps are performed.

Would you like assistance in determining if a git checkout is necessary here or to remove the TODO comment?

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 2ffdd2b and 66a3f53.

📒 Files selected for processing (8)
  • user-deploy-cloud-pat-script.sh (1 hunks)
  • vibi-dpu/Cargo.toml (1 hunks)
  • vibi-dpu/src/graph/file_imports.rs (2 hunks)
  • vibi-dpu/src/graph/function_call.rs (2 hunks)
  • vibi-dpu/src/graph/function_name.rs (2 hunks)
  • vibi-dpu/src/graph/gitops.rs (1 hunks)
  • vibi-dpu/src/graph/graph_edges.rs (4 hunks)
  • vibi-dpu/src/graph/utils.rs (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • vibi-dpu/Cargo.toml
🧰 Additional context used
🔇 Additional comments (13)
user-deploy-cloud-pat-script.sh (1)

41-43: ⚠️ Potential issue

Consider the implications of setting LOG_LEVEL to Debug in production

The addition of the LOG_LEVEL environment variable with the value Debug is correctly implemented and properly indented. However, there are a few points to consider:

  1. Setting the log level to Debug in a production environment can have performance implications and may expose sensitive information.
  2. It's generally a best practice to make log levels configurable rather than hardcoding them in the deployment script.

Consider the following improvements:

  1. Make the LOG_LEVEL configurable:

    - name: LOG_LEVEL
    -   value: Debug
    + name: LOG_LEVEL
    +   value: $_LOG_LEVEL

    Then, set $_LOG_LEVEL as an environment variable when running the script.

  2. Add a comment explaining the purpose of setting this environment variable.

  3. Ensure that there's a mechanism in place to change the log level without redeploying (e.g., through a config map or environment variable that can be updated).

To ensure this change doesn't affect other parts of the system, let's check for any hardcoded log level settings:

This will help identify if there are other places where the log level is set, ensuring consistency across the application.

✅ Verification successful

LOG_LEVEL Configuration Verified

No additional hardcoded LOG_LEVEL settings with the value Debug were found in the codebase. However, it's recommended to make the LOG_LEVEL configurable to enhance flexibility and adhere to best practices.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for hardcoded log level settings in the codebase
rg -i 'log[_\s]level.*=.*debug' --type rust

Length of output: 45


Script:

#!/bin/bash
# Search for hardcoded log level settings across all relevant file types
rg -i 'log[_\s]level\s*=\s*["'\'']?debug["'\'']?' --files-with-matches --ignore-case

Length of output: 86

vibi-dpu/src/graph/function_name.rs (1)

87-87: LGTM: Appropriate debug logging added

The addition of this debug log statement is beneficial. It provides visibility into the code_line being processed, which can be crucial for debugging and tracing the function's behavior.

vibi-dpu/src/graph/utils.rs (3)

78-78: Improved observability with debug log

The addition of this debug log statement enhances the observability of the call_llm_api function by providing visibility into the final API response. This change aligns well with the PR objective of improving debug logs and will be valuable for troubleshooting and monitoring the API interactions.


85-85: Enhanced traceability with file name logging

The addition of this debug log statement improves the traceability of file operations in the read_file function. By logging the file name at the start of the function, it becomes easier to track which files are being accessed, which is particularly useful for debugging and auditing purposes. This change aligns well with the PR objective of improving debug logs.


78-78: Summary: Improved logging enhances observability

The changes in this file focus on improving debug logging in two key functions: call_llm_api and read_file. These additions enhance the observability of the codebase by providing more detailed information during execution, which will be valuable for debugging and monitoring purposes. The changes are minimal, focused, and align well with the PR objectives of improving debug logs.

Some points to consider:

  1. Ensure that these debug logs are not accidentally left in production builds if they contain sensitive information.
  2. Consider adding similar debug logs to other critical functions in the codebase for consistency.
  3. If not already in place, consider implementing a logging strategy that allows for easy enabling/disabling of debug logs based on environment or configuration.

Overall, these changes are beneficial and improve the maintainability of the codebase.

Also applies to: 85-85

vibi-dpu/src/graph/function_call.rs (3)

270-272: Improved observability with debug logging

The addition of debug logging statements enhances the observability of the functions_in_file method. This change will be beneficial for debugging and understanding the processing flow of chunks and their resulting function calls.


Line range hint 351-356: Enhanced debugging capability for hunk-function pair matching

The addition of the debug logging statement for hunk_func_pairs improves the observability of the function_calls_in_hunks method. This change will be valuable for debugging and verifying the correct matching of hunks with their corresponding function calls.


Line range hint 1-396: Summary of changes: Improved logging for better debugging

The modifications in this file focus on enhancing the logging capabilities of the FunctionCallIdentifier struct. These changes will significantly improve the ability to debug and understand the function call identification process, particularly in the functions_in_file and function_calls_in_hunks methods. The additions are consistent with the PR objectives and follow best practices for code observability.

vibi-dpu/src/graph/graph_edges.rs (4)

47-47: Consistency in error logging messages

The error message at line 47 correctly references [outgoing_edges], ensuring clarity in log outputs.


90-94: Efficient handling of language detection failures

The code appropriately checks if the language detection fails and logs an error before continuing, which is good for debugging and prevents potential issues downstream.


113-115: Ensure variables are correctly named and scoped

At lines 113-115, variables src_func_name and src_func_line_number are appropriately extracted within nested if let blocks, ensuring that they are only used when valid.


182-183: Ensure proper loop termination

At lines 182-183, the closing braces are aligned correctly, ensuring that the loops and function scopes are properly nested.

vibi-dpu/src/graph/file_imports.rs (1)

362-365: ⚠️ Potential issue

Potential logical error in condition check.

At lines 362-365, the code performs the following check:

if !import_path.get_matching_import().possible_file_path().is_empty() {
    return None;
}
return Some(import_path);

This condition returns None when possible_file_path is not empty, and returns Some(import_path) only when possible_file_path is empty. This seems counterintuitive. Shouldn't the function return Some(import_path) when a valid possible_file_path is found?

Please verify and correct the condition if necessary.

Suggested fix:

-            if !import_path.get_matching_import().possible_file_path().is_empty() {
+            if import_path.get_matching_import().possible_file_path().is_empty() {

Comment on lines +68 to +75
pub fn is_func_in_hunks(&self, function_name: &str, edge_color: &str) -> &Option<usize> {
let hunks;
if edge_color == "green" {
hunks = self.added_hunks();
} else {
hunks = self.deleted_hunks();
}
for hunk_lines in self.deleted_hunks() {
for hunk_lines in hunks {
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Improve type safety and return value of is_func_in_hunks method

The changes to the is_func_in_hunks method improve its flexibility by allowing it to check both added and deleted hunks. However, there are some areas for improvement:

  1. Replace the edge_color: &str parameter with an enum for better type safety:
enum HunkType {
    Added,
    Deleted,
}

pub fn is_func_in_hunks(&self, function_name: &str, hunk_type: HunkType) -> Option<(usize, HunkType)> {
    let hunks = match hunk_type {
        HunkType::Added => self.added_hunks(),
        HunkType::Deleted => self.deleted_hunks(),
    };

    // ... rest of the method
}
  1. Update the return type to provide more context about the found hunk:
pub fn is_func_in_hunks(&self, function_name: &str, hunk_type: HunkType) -> Option<(usize, HunkType)> {
    // ... existing logic

    for hunk_lines in hunks {
        if let Some(func_raw) = hunk_lines.function_line() {
            if func_raw.contains(function_name) {
                return hunk_lines.line_number().map(|line| (line, hunk_type));
            }
        }
    }
    None
}

These changes will make the method more type-safe and provide more information to the caller about the found hunk.

Comment on lines +125 to +127
if diff_graph.hunk_diff_map().all_files().contains(&possible_diff_file_path)
{
log::debug!("[process_func_calls] possible_diff_file_path ={}", &possible_diff_file_path);
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Simplify conditional check

The condition in line 125 checks if possible_diff_file_path is contained within diff_graph.hunk_diff_map().all_files(). Since possible_diff_file_paths is already filtered based on this condition, this check may be redundant.

Consider removing the redundant condition to streamline the code.

Comment on lines +161 to +164
if let Some(func_def) = funcdef_identifier.function_defs_in_file(
possible_file_pathbuf, &lang, dest_func_call.function_name()).await {
log::debug!("[process_func_calls] func_def ={:#?}", &func_def);
if let Some(dest_func_def_line) = func_def.get_function_line_number() {
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Check for potential performance improvements

At lines 161-164, when searching for function definitions, consider caching results or optimizing the search if this operation is frequent and affects performance.

Would you like to explore strategies for optimizing function definition searches?

Comment on lines +150 to +153
let possible_file_pathbufs: Vec<&PathBuf> = base_filepaths.iter()
.filter(|file_path|
file_path.to_string_lossy().contains(import_filepath.get_matching_import().possible_file_path())).collect();
log::debug!("[process_func_calls] possible_file_pathbufs = {:?}", &possible_file_pathbufs);
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Use path comparison methods instead of string matching

In lines 150-153, paths are compared using to_string_lossy() and contains(), which may lead to incorrect behavior on different platforms or with complex paths. It's better to use path operations for reliable comparisons.

Apply this diff to compare paths more robustly:

-let possible_file_pathbufs: Vec<&PathBuf> = base_filepaths.iter()
-    .filter(|file_path| 
-        file_path.to_string_lossy().contains(import_filepath.get_matching_import().possible_file_path())).collect();
+let import_path = Path::new(import_filepath.get_matching_import().possible_file_path());
+let possible_file_pathbufs: Vec<&PathBuf> = base_filepaths.iter()
+    .filter(|file_path| file_path.ends_with(import_path)).collect();
📝 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
let possible_file_pathbufs: Vec<&PathBuf> = base_filepaths.iter()
.filter(|file_path|
file_path.to_string_lossy().contains(import_filepath.get_matching_import().possible_file_path())).collect();
log::debug!("[process_func_calls] possible_file_pathbufs = {:?}", &possible_file_pathbufs);
let import_path = Path::new(import_filepath.get_matching_import().possible_file_path());
let possible_file_pathbufs: Vec<&PathBuf> = base_filepaths.iter()
.filter(|file_path| file_path.ends_with(import_path)).collect();
log::debug!("[process_func_calls] possible_file_pathbufs = {:?}", &possible_file_pathbufs);

log::debug!("[process_func_calls] possible_diff_file_path ={}", &possible_diff_file_path);
if let Some(possible_file_rel) = absolute_to_relative_path(possible_diff_file_path, review) {
let hunks_for_func = diff_graph.hunk_diff_map().file_line_map()
.get(possible_diff_file_path).expect("Empty entry in file_line_map");
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Avoid potential panics by handling Option properly

Using expect("Empty entry in file_line_map") at line 130 can cause a panic if the entry does not exist. It's safer to handle the None case to prevent unexpected crashes.

Apply this diff to handle the None case:

-let hunks_for_func = diff_graph.hunk_diff_map().file_line_map()
-    .get(possible_diff_file_path).expect("Empty entry in file_line_map");
+if let Some(hunks_for_func) = diff_graph.hunk_diff_map().file_line_map()
+    .get(possible_diff_file_path) {
+    // Existing code that uses hunks_for_func
+} else {
+    log::error!("[process_func_calls] No entry found in file_line_map for {}", possible_diff_file_path);
+    continue;
+}

Committable suggestion was skipped due to low confidence.

@@ -340,6 +340,7 @@ impl ImportIdentifier {
}
let import_struct_str = import_struct_str_res.expect("Uncaught error in import_struct_str_res");
let prompt_str = format!("{}\nOutput -", &import_struct_str);
log::debug!("[ImportIdentifier/get_import_path] code_chunk: {}", chunk);
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Avoid logging sensitive code fragments.

At line 343, the debug log statement outputs the code_chunk, which may contain sensitive code content. Logging code fragments can pose security risks by exposing confidential information in logs. Please consider removing this log statement or ensure that it does not log sensitive data.

@tapishr tapishr merged commit aabb836 into main Oct 14, 2024
2 checks passed
@tapishr tapishr deleted the tr/fixes/diffgraph branch October 14, 2024 21:36
Copy link

vibinex-dpu bot commented Oct 14, 2024

Relevant users for this PR:

Contributor Name/Alias Relevance
tapishr 100.00%

Ignoring following files due to large size: - vibi-dpu/src/graph/file_imports.rs

  • vibi-dpu/src/graph/function_name.rs

Auto assigning to relevant reviewers.

If you are a relevant reviewer, you can use the Vibinex browser extension to see parts of the PR relevant to you
Relevance of the reviewer is calculated based on the git blame information of the PR. To know more, hit us up at contact@vibinex.com.

To change comment and auto-assign settings, go to your Vibinex settings page.

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.

1 participant