مدقق توازن الأقواس
يفحص مدقق توازن الأقواس الأقواس العادية والمربعة والمعقوفة في الشيفرة أو النص عبر مسح حتمي واحد.
شغّل الأداة مجانًا
ويتأكد من أن لكل قوس فتح قوس إغلاق من النوع الصحيح، وأن ترتيب التداخل سليم. إذا كان الإدخال غير صالح، تحدد النتيجة أول اختلاف يمكن اكتشافه، وتعرض موضعه الذي يبدأ من الصفر، والمحرف الموجود، والمحرف المتوقع. لذلك يفيد المدقق في المراجعة اليدوية، والتكامل مع المحررات، ونصوص البناء، والتمارين التعليمية، ومسارات التحقق الخفيفة من دون الحاجة إلى محلل خاص بلغة برمجة معينة.
تعرفوا إلى نطاق التحقق
يركز هذا المدقق على عائلات الأقواس الثلاث الأكثر شيوعا في الشيفرة المصدرية والنص المنظم: الأقواس العادية والمربعة والمعقوفة. يكون الإدخال صالحا عندما يقابل كل محرف فتح محرف إغلاق من العائلة نفسها، وتأتي الإغلاقات بعكس ترتيب الفتح. فالمثال <code>({[]})</code> متوازن لأن كل زوج داخلي يغلق قبل الحاوية التي تضمه، أما <code>([)]</code> فغير متوازن لأن القوس العادي يغلق بينما يظل القوس المربع مفتوحا. لا تؤثر المحارف الأخرى غير رموز الأقواس الستة في النتيجة. وبذلك يمكنكم لصق دالة أو جزء من إعدادات أو تعبير رياضي أو فقرة نثرية أو نموذج متعدد الأسطر. الفحص معجمي وليس مدركا لقواعد لغة بعينها؛ لذلك يحسب أيضا الأقواس الواقعة داخل السلاسل النصية المقتبسة أو التعليقات. تجعل هذه القاعدة الواضحة سلوكه ثابتا عبر اللغات، لكنها تعني أنه لا يحل محل محلل JavaScript أو Python أو JSON أو المترجم عندما ينبغي تجاهل الأقواس داخل السلاسل والتعليقات.
اقرؤوا المواضع وبيانات التشخيص
عندما لا يطابق قوس الإغلاق أحدث قوس فتح، يتوقف التحقق فورا ويبلغ عن محرف الإغلاق بوصفه أول اختلاف مكتشف. تتضمن الاستجابة <code>balanced: false</code> وقيمة <code>position</code> تبدأ من الصفر، والمحرف <code>found</code> والقيمة <code>expected</code>. في تداخل غير صحيح مثل <code>{[}</code>، يبلغ عن القوس المعقوف المغلق في الموضع اثنين لأن قوسا مربعا مغلقا كان مطلوبا هناك. وتعرض الاستجابة أيضا موضع قوس الفتح الذي أوجد هذا التوقع. إذا ظهر قوس إغلاق من دون وجود قوس فتح متاح، توضح القيمة المتوقعة أن قوس فتح كان مطلوبا. ولا يمكن معرفة أن قوس فتح بقي بلا إغلاق إلا بعد انتهاء المسح؛ عندئذ تشير النتيجة إلى أحدث قوس فتح غير مغلق وتذكر محرف الإغلاق اللازم. يستخدم المدقق فهرسة سلاسل JavaScript، ولذلك تمثل المواضع إزاحات وحدات ترميز UTF-16. وفي شيفرة ASCII المعتادة تطابق هذه الإزاحات مواضع المحارف التي تعرضها معظم المحررات.
استخدموه في الأتمتة والمراجعة
لإجراء فحص تفاعلي، الصقوا الشيفرة أو النص في مشغل المتصفح وراجعوا الاستجابة المنظمة. تستخدم API المحلل الحتمي نفسه، ولذلك تحصل الأتمتة على القرار وحقول التشخيص نفسها التي يعرضها التشغيل اليدوي. يمكن لخطاف ما قبل الإيداع رفض المقاطع المولدة عندما تكون قيمة <code>balanced</code> هي false، ويمكن لمسار التوثيق اكتشاف الأمثلة المشوهة قبل نشرها، كما يستطيع تطبيق تعليمي استخدام المحرف المتوقع والموضع الدقيق لتقديم إرشاد محدد. تبلغ تكلفة طلب API الواحد $0.002، ولا توجد رسوم متغيرة معلنة لكل محرف. يستغرق التحقق زمنا خطيا لأن كل محرف يزار مرة واحدة، بينما لا تخزن المكدسة إلا أقواس الفتح التي لم تغلق بعد. لا تعيد الأداة كتابة المحتوى المرسل ولا تصلحه أو تنسقه أو تنفذه أو تقيمه. تعاملوا مع الاستجابة على أنها إشارة دقيقة إلى بنية الأقواس، واجمعوها مع محلل أو linter خاص باللغة إذا احتجتم أيضا إلى فحص القواعد أو السلاسل النصية أو التعليقات أو أخطاء الصياغة الأخرى.
حالات الاستخدام
افحصوا الشيفرة المولدة قبل حفظها
ارفضوا المقطع المولد عندما يكون التداخل ناقصا أو عندما ينتمي قوس الإغلاق إلى زوج آخر.
قدموا إرشادا دقيقا للمتعلمين
اعرضوا الموضع الذي يبدأ من الصفر ومحرف الإغلاق المتوقع بدلا من الاكتفاء بذكر أن التعبير غير صالح.
تحققوا من أمثلة التوثيق
افحصوا نماذج الشيفرة في مسار النشر واكشفوا البنى غير الصحيحة قبل وصولها إلى القراء.
الأسئلة الشائعة
ما المحارف التي يجري فحصها؟
يفحص المدقق الأقواس العادية () والمربعة [] والمعقوفة {}، ويتجاهل جميع المحارف الأخرى.
هل تبدأ المواضع من الصفر؟
نعم. الموضع صفر هو أول وحدة ترميز UTF-16 في السلسلة وفقا لفهرسة JavaScript.
هل تتجاهلون الأقواس داخل السلاسل أو التعليقات؟
لا. هذا فحص معجمي مستقل عن اللغة، ولذلك يحسب كل قوس مستهدف أينما ظهر.
ماذا يحدث إذا لم يغلق قوس فتح؟
بعد مسح الإدخال كاملا، تحدد النتيجة أحدث قوس فتح غير مغلق ومحرف الإغلاق الذي يحتاج إليه.
ما تكلفة طلب API؟
تبلغ تكلفة كل طلب API مقدار $0.002. وينفذ مشغل المتصفح الفحص الحتمي نفسه محليا.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/dev/balanced-brackets \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"function demo(items) { return items[0]; }"}'const res = await fetch("https://api.kit.forhosting.com/dev/balanced-brackets", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "function demo(items) { return items[0]; }"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/balanced-brackets",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "function demo(items) { return items[0]; }"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/balanced-brackets", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"function demo(items) { return items[0]; }"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"function demo(items) { return items[0]; }"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/balanced-brackets", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"text": "function demo(items) { return items[0]; }"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.balanced_brackets",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |