<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: SHREYA</title>
    <description>The latest articles on DEV Community by SHREYA (@shreya_922038471961f80311).</description>
    <link>https://dev.to/shreya_922038471961f80311</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2942904%2Fe6e3c13a-d1d2-4d57-a643-d39933a78b65.png</url>
      <title>DEV Community: SHREYA</title>
      <link>https://dev.to/shreya_922038471961f80311</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shreya_922038471961f80311"/>
    <language>en</language>
    <item>
      <title>The Great AI Comparison: Which Tool Fits Your Workflow Best? by Runner H</title>
      <dc:creator>SHREYA</dc:creator>
      <pubDate>Thu, 26 Jun 2025 15:39:44 +0000</pubDate>
      <link>https://dev.to/shreya_922038471961f80311/the-great-ai-comparison-which-tool-fits-your-workflow-best-by-runner-h-2o4a</link>
      <guid>https://dev.to/shreya_922038471961f80311/the-great-ai-comparison-which-tool-fits-your-workflow-best-by-runner-h-2o4a</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/runnerh"&gt;Runner H "AI Agent Prompting" Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built an &lt;strong&gt;automated AI Tool&lt;/strong&gt; Comparison Generator using Runner H’s agent capabilities. This agent takes &lt;strong&gt;4–5 popular AI tools (like ChatGPT, Gemini, Notion AI, Claude, and Perplexity)&lt;/strong&gt;, visits their websites, YouTube demo videos, and pricing pages, and auto-generates a detailed comparison &lt;strong&gt;table + infographic.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The goal is to help users, developers, and decision-makers quickly compare tools across critical features like output quality, speed, privacy, integrations, and pricing — without doing manual research.&lt;/p&gt;

&lt;p&gt;What sets this apart? I connected the Runner H agent to &lt;strong&gt;Google Docs&lt;/strong&gt; and &lt;strong&gt;Notion&lt;/strong&gt;, enabling it to surf embedded documents, product changelogs, and deep-dive feature breakdowns that are often missed when scraping just public-facing websites.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prompt
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Compare the following 5 AI tools:

- Notion AI
- Google Gemini (Workspace integration)
- ChatGPT (OpenAI)
- Claude (Anthropic)
- Perplexity AI

Visit each tool’s:

- Official website
- YouTube demos and walkthroughs
- Pricing pages and feature docs

Create a comparison table and a visually engaging infographic based on these 10 features:

- Core Capabilities – What can it do (writing, coding, research, summarization, etc.)?
- User Interface &amp;amp; Experience – Ease of use, visual design, onboarding
- Integration Support – Works with Google Docs, Slack, APIs, browser extensions, etc.
- Output Quality – Accuracy, nuance, style, tone control
- Speed &amp;amp; Performance – Response time, downtime reports, performance under load
- Customization Options – Custom instructions, personas, plugins
- Collaboration Tools – Shared chats, team spaces, export options
- Pricing &amp;amp; Plan Tiers – Free tier vs pro plans, monthly cost, limits
- Privacy &amp;amp; Data Usage – Data retention, user control, enterprise options
- Unique Selling Points – Any special features, modes, or tech differentiators
End with a 1-line summary for each tool:

“Best for ____” (e.g., students, researchers, product managers, etc.)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Below attached the &lt;strong&gt;Demo link&lt;/strong&gt; from Runner H&lt;/p&gt;

&lt;p&gt;&lt;a href="https://runner.hcompany.ai/chat/19be7256-8ae1-4b5e-a25f-00291bcaec03/share" rel="noopener noreferrer"&gt;AI Comparison Tool&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ Attached the &lt;strong&gt;Youtube&lt;/strong&gt; Video &lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/QJqMAjzi7Zo"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Connecting to Google Docs &amp;amp; Notion&lt;/strong&gt;
In this first step, the Runner H agent is configured to access and surf embedded Google Docs and Notion pages. These sources often contain detailed product specs, roadmaps, or changelogs that aren't available on public landing pages — making this step essential for capturing rich, contextual insights about each AI tool.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4kwido441fc4kk1umrsf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4kwido441fc4kk1umrsf.png" alt="Imag0"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Searching Information for 5 AI Tools&lt;/strong&gt;
The agent then begins its information-gathering phase, visiting the official websites, YouTube demos, pricing pages, and documentation for the selected AI tools — ChatGPT, Google Gemini, Claude, Notion AI, and Perplexity AI. This ensures it collects up-to-date and accurate data across 10 comparison features.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5m1dk07pygftngdcd0qd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5m1dk07pygftngdcd0qd.png" alt="Image4"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Feature-by-Feature Comparison Table&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once the data is extracted, Runner H compiles it into a structured comparison table, highlighting differences across 10 key features like core capabilities, output quality, speed, integrations, customization, and pricing. This table is automatically exported to Google Docs for easy viewing, editing, or sharing.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feo056iwkqlqq195q8kr3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feo056iwkqlqq195q8kr3.png" alt="Imag1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9uqy136xg4sj6e99ib3l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9uqy136xg4sj6e99ib3l.png" alt="Imag2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Summary &amp;amp; Recommendations&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally, the tool generates a summary row for each AI assistant, offering a concise “Best for ___” recommendation. This helps users quickly identify which tool is ideal for students, creators, teams, technical users, or enterprise adoption — turning hours of manual comparison into a one-minute insight.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fam53hldail8ytjhxuzi9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fam53hldail8ytjhxuzi9.png" alt="Imag3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generated PDF&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://drive.google.com/file/d/18DC9NHWBKRzibgxplaAyzSkBX9IBDjZq/view?usp=sharing" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How I Used Runner H
&lt;/h2&gt;



&lt;p&gt;I used Runner H’s agent framework to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Input Prompt Structure&lt;/strong&gt;: Created a structured prompt that asks the agent to compare 5 specific AI tools across 10 detailed features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Web Scraping&lt;/strong&gt;: The agent navigates to the official sites, YouTube demos, and pricing pages of each tool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Aggregation&lt;/strong&gt;: Runner H extracts key points from various sources and compiles them into a table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infographic Generation&lt;/strong&gt;: The agent outputs a ready-to-publish infographic summarizing findings visually.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export&lt;/strong&gt;: The results are exported directly into a Google Docs and image asset, ideal for content creators or analysts.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Use Case &amp;amp; Impact
&lt;/h2&gt;



&lt;p&gt;✅ &lt;strong&gt;Product Managers comparing LLM-powered platforms&lt;/strong&gt;&lt;br&gt;
Quickly evaluate AI tools based on technical depth, integration support, and team collaboration features. Helps make data-driven decisions aligned with product goals and timelines.&lt;br&gt;
✅ &lt;strong&gt;Founders &amp;amp; CTOs evaluating which AI to embed&lt;/strong&gt;&lt;br&gt;
Gain clarity on performance, API access, privacy policies, and scalability. Reduces risk when selecting the best-fit AI solution for long-term product infrastructure.&lt;br&gt;
✅ &lt;strong&gt;Content Creators building blogs, reels, or carousels&lt;/strong&gt;&lt;br&gt;
Instantly generate comparison tables and infographics with accurate, current data. Saves hours of research and design, letting creators focus on storytelling and growth.&lt;br&gt;
✅ &lt;strong&gt;Educators and Analysts creating lecture slides or decks&lt;/strong&gt;&lt;br&gt;
Pull real-world insights from official docs and demos to create impactful learning content. Keeps academic and professional materials fresh, relevant, and engaging.&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;Why It Matters&lt;/strong&gt;&lt;br&gt;
By combining Runner H with deep-link surfing into Google Docs and Notion, this tool uncovers highly contextual insights often missed by surface scrapers. Whether you're benchmarking tools, preparing content, or comparing platforms for adoption — this agent saves hours of manual work and produces sharable, up-to-date outputs in minutes.&lt;/p&gt;
&lt;h3&gt;
  
  
  Social Love
&lt;/h3&gt;



&lt;p&gt;I’m thrilled to share my submission for the &lt;strong&gt;Runner H&lt;/strong&gt; with the community! 🚀&lt;br&gt;
This project represents countless hours of creativity, coding, and collaboration. I’m proud of what I’ve built and excited to see how others push boundaries too!&lt;/p&gt;

&lt;p&gt;🔗 Check it out and let me know what you think!&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1938262441055379893-954" src="https://platform.twitter.com/embed/Tweet.html?id=1938262441055379893"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1938262441055379893-954');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1938262441055379893&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Made with ❤️&lt;br&gt;
Huge thanks to &lt;strong&gt;Runner H&lt;/strong&gt; and &lt;strong&gt;Dev community&lt;/strong&gt; for hosting this awesome challenge! 🙌&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>runnerhchallenge</category>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Refactor Advisor and Analysis Automation Tool- Smart Code Amazon Q CLI Tool</title>
      <dc:creator>SHREYA</dc:creator>
      <pubDate>Sun, 11 May 2025 11:51:10 +0000</pubDate>
      <link>https://dev.to/shreya_922038471961f80311/refactor-advisor-and-analysis-automation-tool-smart-code-amazon-q-cli-tool-1hc0</link>
      <guid>https://dev.to/shreya_922038471961f80311/refactor-advisor-and-analysis-automation-tool-smart-code-amazon-q-cli-tool-1hc0</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/aws-amazon-q-v2025-04-30"&gt;Amazon Q Developer "Quack The Code" Challenge&lt;/a&gt;: Crushing the Command Line&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;RefactorAdvisor&lt;/strong&gt; because I often found myself overwhelmed revisiting old Python projects 🧠💻 — the kind where functions stretch hundreds of lines, imports pile up, and clarity fades away. Like many developers, I wanted to clean things up but didn’t always have the time (or patience) for deep manual reviews. Traditional linters felt too shallow, and I wanted something smarter. That’s when I discovered &lt;strong&gt;Amazon Q&lt;/strong&gt; 🤖 — a tool that could understand context and suggest meaningful improvements. So, I created &lt;strong&gt;RefactorAdvisor&lt;/strong&gt;: a CLI tool that walks through your project 📁, &lt;strong&gt;splits long files&lt;/strong&gt; into manageable chunks ✂️, sends them to Amazon Q for &lt;strong&gt;analysis&lt;/strong&gt;, and returns actionable &lt;strong&gt;refactoring tips&lt;/strong&gt; 🛠️. Whether you just want quick insights or a full &lt;strong&gt;Markdown report&lt;/strong&gt; 📄, it helps bring order back to your code — one chunk at a time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features of RefactorAdvisor&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🗂️&lt;strong&gt;Smart Project Traversal&lt;/strong&gt;
🔍 Recursively scans a specified project directory&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;📄 Identifies all .py source files for analysis&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ python refactor_advisor.py --path ./my_project

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;✂️ &lt;strong&gt;Chunking Large Files&lt;/strong&gt;
🧩 Breaks large files into ~100-line chunks (adjustable via CLI)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🔄 Keeps analysis consistent with Amazon Q’s input limits&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ python refactor_advisor.py --path ./app --chunk-size 80

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;🤖 &lt;strong&gt;Amazon Q Integration&lt;/strong&gt;
📤 Sends each chunk to Amazon Q CLI via subprocess&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🧠 Asks Q to:&lt;/p&gt;

&lt;p&gt;Summarize the chunk&lt;/p&gt;

&lt;p&gt;Identify code smells&lt;/p&gt;

&lt;p&gt;Suggest &lt;strong&gt;refactorings&lt;/strong&gt; based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DRY&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SOLID&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Readability&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⚠️ Requires AWS CLI &amp;amp; Amazon Q setup&lt;br&gt;
Uses aws q or amazon-q under the hood&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;📊 &lt;strong&gt;Organized Output&lt;/strong&gt;
🎨 Displays feedback in the terminal with:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;✅ &lt;strong&gt;Sectioned summaries&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🎯 &lt;strong&gt;Color-coded highlights&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;📝 Optionally writes reports in Markdown per file:&lt;/p&gt;

&lt;p&gt;Example: analysis/utils_refactor_report.md&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ python refactor_advisor.py --path ./api --output ./refactor_reports

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Customizable CLI&lt;/strong&gt;
🧪 Simple and flexible interface using argparse
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ python refactor_advisor.py \
    --path ./project_dir \
    --output ./analysis_reports \
    --chunk-size 120

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Screenshots and Report Files&lt;/strong&gt;&lt;br&gt;
💻 Chunking the Python file with Amazon Q 🐍&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1c40u2mduvlvay09i1qm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1c40u2mduvlvay09i1qm.png" alt="Image_1" width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
💻 Chunking, Give Code and Function Summary, Code Fixes and Refactoring Suggestions🐍&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faxwsxl2vf1k8s8lvu606.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faxwsxl2vf1k8s8lvu606.jpg" alt="Image_2" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Below Attached the Brief reports on the file which was analyzed in the below drive in .txt and .md format generated by the tool&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://drive.google.com/drive/folders/103lXanKmUxkl89de1o3KLz-G99qLhmEn?usp=sharing" rel="noopener noreferrer"&gt;Brief Analysis Report&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code Snippets&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;🧩 Part 1: Imports and Setup&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;argparse&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;📌 Explanation:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imports necessary modules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;os, Path for filesystem operations&lt;/li&gt;
&lt;li&gt;argparse for CLI argument parsing&lt;/li&gt;
&lt;li&gt;subprocess for interacting with Amazon Q via terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🧩 Part 2: Find Python Files&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;find_python_files&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;directory&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Recursively finds all .py files in the given directory.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;py_files&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;walk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;directory&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;endswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.py&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="n"&gt;py_files&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;py_files&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;📌 Explanation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Walks through the given directory and subfolders&lt;/li&gt;
&lt;li&gt;Collects paths of all .py files for later analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🧩 Part 3: Chunking Source Code&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;chunk_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;chunk_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Splits a Python file into chunks of N lines.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readlines&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;chunks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;chunk_size&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;chunk_size&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;chunks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;chunk_size&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;chunks&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📌 Explanation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reads the content of a file&lt;/li&gt;
&lt;li&gt;Divides it into chunks of chunk_size lines (default is 100)&lt;/li&gt;
&lt;li&gt;Returns a list of tuples: (chunk_number, code_text)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🧩 Part 4: Analyze Chunk with Amazon Q&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;analyze_chunk&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk_code&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Sends a chunk of code to Amazon Q CLI for analysis.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Popen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;amazon-q&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;analyze&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PIPE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PIPE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;stderr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PIPE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stderr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;communicate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk_code&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;stdout&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;stdout&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;stderr&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📌 Explanation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses subprocess.Popen() to call the Amazon Q CLI&lt;/li&gt;
&lt;li&gt;Sends a chunk of code for analysis&lt;/li&gt;
&lt;li&gt;Captures and returns either the standard output or error&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🧩 Part 5: Write Results to Files&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;write_report&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output_dir&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Writes the analysis results to Markdown and TXT files.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;output_path_md&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_name&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;stem&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;_refactor_report.md&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;output_path_txt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_name&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;stem&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;_refactor_report.txt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_path_md&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f_md&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_path_txt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f_txt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;f_md&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;f_txt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📌 Explanation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writes the combined results of all chunks from one file into:&lt;/li&gt;
&lt;li&gt;.md for rich text reports&lt;/li&gt;
&lt;li&gt;.txt for plain text output&lt;/li&gt;
&lt;li&gt;Uses the file name as the base for the report name&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Code Repository
&lt;/h2&gt;

&lt;p&gt;🔍 Explore the complete source code on GitHub:&lt;br&gt;
💻 Built with Python 🐍 and designed to integrate smoothly with Amazon Q 🤖 for smarter code reviews and refactoring advice!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/Shreya111111/Refactor-Advisor" rel="noopener noreferrer"&gt;Refactor Advisor &amp;amp; Analysis Automation Tool&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How I Used Amazon Q Developer
&lt;/h2&gt;



&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt;&lt;br&gt;
You are tasked with refactoring a large Python codebase that spans multiple files and has accumulated technical debt over time. The code is hard to maintain, and improving its quality manually seems time-consuming. To automate the process and ensure you don't miss any potential improvements, you decide to use the Refactor Advisor, a tool powered by Amazon Q Developer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution: Refactor Advisor with Amazon Q Developer CLI&lt;br&gt;
Tool Setup and Initialization&lt;/strong&gt; 🛠️&lt;/p&gt;

&lt;p&gt;The Refactor Advisor Python script (refactor_advisor.py) is designed to automate the process of analyzing and refactoring Python code.&lt;/p&gt;

&lt;p&gt;The script uses Amazon Q Developer CLI to send code chunks to Amazon Q for analysis and improvement suggestions.&lt;/p&gt;

&lt;p&gt;The tool is set up with the following command-line arguments:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;--path: Path to the project directory you want to analyze.

--output: (Optional) Path to store the output Markdown report.

--chunk-size: Defines the number of lines in each chunk for Amazon Q to process (default is 100).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Project Traversal and File Detection 🔍&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You run the following command to start the analysis:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
python refactor_advisor.py --path ./my_project --output ./analysis&lt;br&gt;
The tool recursively traverses the ./my_project directory to find all Python files (.py).&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Result: The tool identifies 30 Python files in the project directory that need analysis.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Breaking Files into Chunks&lt;/strong&gt; 🔨&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each Python file is read and broken into smaller chunks of approximately 100 lines (the chunk size is adjustable).&lt;/li&gt;
&lt;li&gt;Large functions or classes may be split across &lt;strong&gt;multiple chunks&lt;/strong&gt; to ensure each part is manageable and fits Amazon Q's input size.&lt;/li&gt;
&lt;li&gt;Sending Chunks to Amazon Q for Analysis 📤&lt;/li&gt;
&lt;li&gt;For each chunk, the script sends a request to Amazon Q Developer CLI with a prompt asking for:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A summary of the code&lt;/strong&gt;: A high-level overview of what the chunk of code is doing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detected code smells or anti-patterns&lt;/strong&gt;: Issues like &lt;strong&gt;duplicated code&lt;/strong&gt;, overly complex functions, long methods, or violation of best practices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refactoring suggestions&lt;/strong&gt;: Based on DRY (Don’t Repeat Yourself), SOLID principles, readability, and performance, Amazon Q suggests how to improve the code.&lt;/li&gt;
&lt;li&gt;Each chunk is processed individually to ensure &lt;strong&gt;detailed feedback&lt;/strong&gt; for each section of the code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Receiving Feedback from Amazon Q 🔄&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amazon Q returns structured feedback in response to each chunk, which includes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A brief &lt;strong&gt;summary&lt;/strong&gt; of the code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code smells&lt;/strong&gt; detected in the chunk (e.g., code duplication, long methods).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Suggestions for improvement&lt;/strong&gt;, including:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refactoring functions&lt;/strong&gt; to be smaller.&lt;/li&gt;
&lt;li&gt;Improving &lt;strong&gt;variable names&lt;/strong&gt; for clarity.&lt;/li&gt;
&lt;li&gt;Combining &lt;strong&gt;duplicate code&lt;/strong&gt; to follow the DRY principle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Breaking down large classes&lt;/strong&gt; or functions to adhere to SOLID principles.&lt;/li&gt;
&lt;li&gt;Displaying the &lt;strong&gt;Results&lt;/strong&gt; 🖥️&lt;/li&gt;
&lt;li&gt;The tool collects all the feedback from Amazon Q and displays it in the terminal.&lt;/li&gt;
&lt;li&gt;Color-coding and sectioning are used to distinguish between:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Green: Suggested improvements&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Yellow: Warnings (code smells detected)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blue: Code summaries&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The results are presented in a clear and structured way, making it easy for developers to understand and take action.&lt;/li&gt;
&lt;li&gt;Optional &lt;strong&gt;Markdown Reports 📄&lt;/strong&gt;
The results are presented in a clear and structured way, making it easy for developers to understand and take action.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🔍 Learnings &amp;amp; Challenges Faced&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Learnings&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrated Amazon Q Developer CLI with Python using subprocess.&lt;/li&gt;
&lt;li&gt;Built a flexible CLI tool using argparse.&lt;/li&gt;
&lt;li&gt;Implemented file chunking logic for large Python files.&lt;/li&gt;
&lt;li&gt;Parsed and formatted Q’s output for terminal and markdown.&lt;/li&gt;
&lt;li&gt;Learned prompt engineering for code summarization and refactoring advice
.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Challenges&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Handling multiline and unstructured Q responses.&lt;/li&gt;
&lt;li&gt;Managing subprocess timeouts and rate limits.&lt;/li&gt;
&lt;li&gt;Ensuring accurate chunk splits without breaking logic.&lt;/li&gt;
&lt;li&gt;Dealing with file encoding errors.&lt;/li&gt;
&lt;li&gt;Validating Amazon Q CLI installation and user configuration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Challenges &amp;amp; ✅ Solutions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Unstructured Q Responses&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Solution: Used textwrap, regex, and custom parsing logic to extract summaries, issues, and suggestions reliably from mixed Q outputs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Subprocess Timeouts / Rate Limits&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Solution: Added try/except around subprocess.run() with timeout parameters. Implemented delays between chunk requests if needed using time.sleep().&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;capture_output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TimeoutExpired&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;⚠️ Amazon Q CLI timed out. Retrying`...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;- Chunking Logic Accuracy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Solution: Used a line counter and buffer to break files logically without splitting mid-function or mid-class (where possible). Configurable chunk size ensures flexibility.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;chunk_size&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;chunk_size&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;- File Encoding Issues&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Solution: Opened files using encoding='utf-8' and handled UnicodeDecodeError gracefully.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;   &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;UnicodeDecodeError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;⚠️ Skipping &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; due to encoding error.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Q&lt;/span&gt; &lt;span class="n"&gt;CLI&lt;/span&gt; &lt;span class="n"&gt;Configuration&lt;/span&gt; &lt;span class="n"&gt;Validation&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Solution: Checked if q CLI is installed using shutil.which() and printed a friendly error if not found.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;shutil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;which&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;q&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;❌ Amazon Q CLI not found. Please install and configure it first.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
This tool revealed common issues such as lack of classes, long functions, inconsistent naming, and missing documentation. Many chunks contain code smells like hardcoded values, redundant logic, and poor error handling.&lt;/p&gt;

&lt;p&gt;To improve the codebase, refactor large functions, adopt consistent naming, improve documentation, and apply object-oriented design where possible. Addressing these areas will enhance maintainability, readability, and reduce technical debt.&lt;/p&gt;

&lt;p&gt;Reachout : &lt;strong&gt;Gmail&lt;/strong&gt; : &lt;a href="https://mail.google.com/mail/u" rel="noopener noreferrer"&gt;Shreyan11111@gmail.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>awschallenge</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
