العمل داخل Cursor / Claude Code / Aider / Copilot

Cursor: غلاف الـ diff

4 دقيقة للقراءة

لما بتـprompt LLM جوّه IDE — Cursor، Zed، IntelliJ AI Assistant، JetBrains AI — الموديل مش حر يدردش. محتاج يطلّع output الـ IDE يقدر يتحلّله ويطبّقه على طول على الـ buffer. شكل المخرج الصح هو unified diff ملفوف في code block.

تدفق الـ module ده:

دورة user-message → diff في Cursor:

System prompt قصير + طلب user مركّز بيوصّلك. ده الـ system prompt اللي بيخلّي الموديل يتصرف زي IDE-native pair:

You are an expert pair programmer working inside an IDE. The user shows you code; you respond with a unified diff (--- / +++ / hunk markers) only — no prose unless explicitly asked. Always preserve unrelated lines exactly.

دلوقتي رسالة الـ user بس الملف والتغيير المطلوب:

File: src/utils/email.ts

export function isValidEmail(s: string): boolean {
  return s.includes("@") && s.includes(".");
}

Task: tighten the validation. Reject leading/trailing whitespace, require at least one char before "@", require a dot AFTER "@", and a TLD of at least 2 letters. Keep the same signature.

Claude Sonnet 4.5 رجّع:

--- src/utils/email.ts
+++ src/utils/email.ts
@@ -1,3 +1,11 @@
 export function isValidEmail(s: string): boolean {
-  return s.includes("@") && s.includes(".");
+  if (s !== s.trim()) return false;
+  
+  const atIndex = s.indexOf("@");
+  if (atIndex <= 0) return false;
+  
+  const domain = s.slice(atIndex + 1);
+  const lastDotIndex = domain.lastIndexOf(".");
+  if (lastDotIndex === -1) return false;
+  
+  return domain.slice(lastDotIndex + 1).length >= 2;
 }

Captured from Claude Sonnet 4.5 (claude-sonnet-4-5) on 2026-04-27. Re-runs may differ slightly.

المخرج ده جاهز للصق. الـ IDE يقدر يطبّقه على طول. مفيش prose تشيله، مفيش شرح تتجاهله، مفيش implementations بديلة.

الـ system prompt بيعمل 4 حاجات في نفس الوقت:

العبارةالأثر
"expert pair programmer"بيظبط الـ persona ناحية صوت مهندس senior
"working inside an IDE"بيأطّر المخرج للاستهلاك بأداة
"unified diff only"بيقفل format المخرج
"preserve unrelated lines exactly"بيمنع الموديل من تهريب تغييرات formatting

الـ constraint الأخير ده مهم أكتر مما يبان. من غيره، الموديل غالباً "بيحسّن" الـ indentation، بيغيّر single quotes لـ double quotes، أو بيضيف trailing newline ناقصة. كل واحدة من دول بتعمل ضوضاء في الـ diff وفي git history. الـ constraint بيجبر الـ diff إنه يضم بس التغيير اللي عايزه.

امتداد مفيد: اطلب من الموديل يضيف الـ test في نفس الـ diff:

Task: tighten the validation as described, AND add a unit test in src/utils/email.test.ts covering the new rules. Both changes in the same diff.

غلاف الـ diff بيتعامل مع تغييرات multi-file بشكل طبيعي — كل ملف بياخد --- / +++ pair. الـ IDE بيطبّق كل الـ hunks مع بعض، وبتجيب تغيير atomic.

لما الـ diff يرجع غلط، الحل نادراً ما يكون "اشتغل تاني بـ prompt أحسن." عادة "وريني اللي جربته، وطبّق الـ patch اللي بوصفه." Cursor، Zed، وأدوات مشابهة بتسمح بده من واجهة الـ chat. نمط المحادثة: الموديل بيقترح diff → بتطبّقه ذهنياً → بتصحّح سطر واحد → الموديل بيعيد كتابة الـ diff. 3 turns، تغيير واحد متـmerge.

الأربع envelopes اللي هتقابلهم في الـ module ده، جنب بعض:

Envelopes Prompts على شكل IDE

Diff

Cursor / Zed

شكل الـ inputملف + مهمة في chat
شكل الـ outputUnified diff (---/+++)
خطوة الـ applyالـ IDE بيعمل patch للـ buffer
قوي فيInline edits، hunks في ملفات كتير
المزايا
  • تغيير atomic على ملفات
  • قابل للمراجعة hunk by hunk
العيوب
  • انجراف line numbers بيكسر diffs قديمة
  • الموديل بيتغرى يعيد تنسيق سطور مش متعلقة
SEARCH/REPLACE

Aider

شكل الـ inputسياق الـ repo + مهمة
شكل الـ output&#x3C;&#x3C;&#x3C; SEARCH / === / REPLACE >>>
خطوة الـ applyAider بيطابق النص بالظبط
قوي فيSessions طويلة، أمان من انجراف السطور
المزايا
  • بيعدّي تعديلات حواليه
  • الـ apply بيفشل بصوت عالي لو misread
العيوب
  • block لكل تعديل منطقي وإلا الـ rollback شكله وحش
  • مفصّل لتغيير سطر واحد
Plan + execute

Claude Code

شكل الـ inputمهمة محادثة + repo
شكل الـ outputPlan → tool calls → diff
خطوة الـ applyالـ agent بيعدّل ويشغّل tests
قوي فيFeatures متعددة الخطوات، invariants
المزايا
  • بوابة plan-then-go بتمنع scope creep
  • الـ agent بيعمل self-check للـ invariants
العيوب
  • محتاج context طويل
  • نمط الفشل هو تعديل في الهدوء من غير 'go'
Completion

Copilot / Tabnine

شكل الـ inputالملف فوق الـ cursor
شكل الـ outputCompletion inline
خطوة الـ applyTab للقبول
قوي فيBodies بـ signature كويسة
المزايا
  • مفيش احتكاك في الـ flow
  • بيتحسّن بـ comments فوق الـ cursor
العيوب
  • مفيش control surface تاني غير الملف
  • عام لو اسم الـ function غامض

التالي: format SEARCH/REPLACE blocks اللي بيستخدمه Aider. :::

اختبار

الوحدة 5: Prompts الأدوات و الـ IDE

خذ الاختبار
هل كان هذا الدرس مفيدًا؟

سجّل الدخول للتقييم

نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.