تخط المحتوى

كلازي

الفئات:   التطوير
لقطة كلازي
كلازي هو مكون إضافي لمترجم Clang يصدر تحذيرات تتعلق بأفضل الممارسات في كيو تي.
ثبت على
لينكس
يعمل هذا الزر فقط مع المستكشف ومتاجر تطبيقات الأخرى. يمكنك أيضًا استخدام مدير حزم توزيعتك.

الإصدارات RSS

1.17 2026-02-15

This release fixes the following bugs:

  • Fix non-pod-static check emitting warning for each entry of a container
  • Fix use-arrow-operator-instead-of-data emitting false positive when value is casted
  • Do not whitelist QVariant for detaching-temporary. QVariant::toString will provide a QString that is not detached
  • detaching-temporary properly checks conditions when more than two method calls are chained
  • Fixits for detaching-temporary/detaching-member are more reliable with fixit ranges for operator calls
  • When using QT_NAMESPACE, clazy properly handles Qt classes being in this specific namespace
  • Fix wrong replacement method for QMap::operator[]
  • Make project compile with LLVM22. qhash-namespace, fully-qualified-moc-types, old-style-connect tests are fixed
  • Adjust readlock-detaching check to work properly with Qt 6.11 changes
  • Move qstring-ref to manuallevel since it is not compatible with Qt6

This release adds the following feature:

  • New checks: - compare-member-check: Checks whether comparison operators do not use all member variables of a class.

C++20 is now required for compilation

qt6-\* porting checks are removed

1.16 2025-09-03

يصلح هذا الإصدار العلات التالية:

  • unused-result-check: إصلاح انهيار عندما لا يمكن حل تصريح الدالة
  • use-chrono-in-qtimer: إصلاح انهيار عند استخدام الترويسات المجمعة مسبقًا
  • qt6-qhash-signature: تطويع الفحص لاستخدام منطق أنسب لعمليات القسر وإصلاح الانهيار في الحالات الحدية
  • ضمان عمل clang21 بشكل سليم مع كلازي وإنتاجه لنفس أرقام الأسطر/الحروف كما في السابق (عدم التطابق مع استدعاءات المعاملات)
  • non-pod-global-static: إصلاح الإيجابيات الزائفة مع Q_IMPORT_PLUGIN في Qt-6.10

يضيف هذا الإصدار الميزات التالية:

  • أصبح بالإمكان دمج كلازي في clang-tidy - أمر واحد ليحكمهم جميعًا!
  • يمكن تفعيل كافة الفحوصات باستخدام "clazy-<checkname>". على سبيل المثال:
  • `clazy-qstring-arg,clazy-qfileinfo-exists` ، تفعيل كافة الفحوصات باستخدام
  • `clazy-*` سيفعل أيضًا الفحوصات اليدوية. ينصح بأن يكون التحديد أكثر دقة.
  • يمكن تحميل الملحق باستخدام `-load=ClazyClangTidy.so` ، ولهذا يجب أن يكون الملحق
  • في LD_LIBRARY_PATH. وإلا، فيمكن تحديد مسار مطلق.
  • يوفر isempty-vs-count الآن إصلاحات لكافة السيناريوهات. كما أن الحالات التي
  • يقارن فيها الطول باستخدام "== 0"، "< 1"، "> 0" يُبلغ عنها الآن ولها إصلاحات.
  • تعد فحوصات النقل qt6-\* مهجورة الآن وستزال في الإصدار القادم من كلازي
  • توفر فحوصات detaching-temporary و detaching-member إصلاحات للدوال التي لها نظائر ثابتة (const)
  • تعمل كافة الكلمات NOLINT/NOLINTNEXTLINE/NOLINTBEGIN/NOLINTEND في كلازي الآن كما
  • هو متوقع. يمكن تعطيل فحوصات كلازي الفردية عند استخدام البادئة "clazy-".
  • على سبيل المثال "NOLINTNEXTLINE(clazy-qfileinfo-exists, clazy-qstring-arg)"
1.15 2025-06-12

يصلح هذا الإصدار العلات التالية:

  • install-event-filter: إصلاح انهيار عند عدم وجود ابن في العمق المحدد. علة: 464372
  • fully-qualified-moc-types: إصلاح عدم تقييم enum/enum class. علة: 423780
  • إصلاح انهيار في qstring-comparison-to-implicit-char. علة: 502458
  • إصلاح انهيار عندما يواجه fully-qualified-moc-types إشارات بتعبيرات مثل "std::bitset<int(8)>"
  • إصلاح انهيار في qvariant-template-instantiation

يضيف هذا الإصدار الميزات التالية:

  • فحوصات جديدة:
  • readlock-detaching
  • تحديث الحد الأدنى لـ Clang/LLVM إلى 19
  • يحتوي `clazy-standalone --version` على إصدارة جيت (مخرجات `git describe`) إذا لم يكن إيداعًا موسومًا
  • إضافة دوال ناقصة لفحوصات فصل القوائم أو الخرائط المؤقتة/الأعضاء
1.14 2025-04-27

يمكن تعطيل تحذيرات كلازي للسطر التالي، على سبيل المثال: clazy:exclude-next-line=check1,check2

دعم التجميع مقابل Clang 20

زيادة إسهاب بعض رسائل التحذير

فحصا `function-args-by-value` و `function-args-by-ref`: إضافة اسم الدالة واسم المعامل إلى رسالة التحذير

فحصا `unused-non-trivial-variable` و `non-pod-global-static`: إضافة اسم المتغير إلى رسالة التحذير

يضيف هذا الإصدار الميزات التالية:

  • فحوصات جديدة:
  • qbytearray-conversion-to-c-style
1.13 2024-12-28

يضيف هذا الإصدار الميزات التالية:

  • فحوصات جديدة:
  • used-qunused-variable

يصلح هذا الإصدار العلات التالية:

  • يوفر فحص qstring-arg إصلاحًا آليًا
  • إصلاح unused-non-trivial-variable لكي لا يحذر عند ضبط [[maybe_unused]]
  • إصلاح qstring-arg لنسخة Qt 6.9 القادمة
  • إصلاح الإيجابيات الزائفة في fully-qualified-moc-types لمغيرات const في المعاملات العامة
  • إسكات تحذير الإيجابيات الزائفة في non-pod-global-static لتهيئة وحدات QML
  • إصلاح إيجابية زائفة في function-args-by-value كانت لتتسبب في خطأ تجميع
  • في منشئات النسخ، ومعاملات الإسناد وفحوصات المساواة
  • أُصلحت الإيجابيات الزائفة لـ `Q_EMIT(someSignal())` الآن
1.12 2024-06-30

يضيف هذا الإصدار الميزات التالية:

  • فحوصات جديدة:
  • qt-keyword-emit
  • sanitize-inline-keyword
1.11 2022-01-21

يضيف هذا الإصدار الميزات التالية:

  • فحوصات جديدة:
  • use-arrow-operator-instead-of-data
  • use-static-qregularexpression
  • unexpected-flag-enumerator-value
  • إزالة فحص inefficient-qlist (أُصلح في Qt6)
1.10 2021-07-20

يصلح هذا الإصدار العلات التالية:

  • يتطلب C++17
  • إصلاح علل:
  • إصلاح إيجابية زائفة في -Wclazy-lambda-in-connect
  • إصلاح انهيار في copyable-polymorphic عند تفعيل PCH
1.9 2021-01-10

يصلح هذا الإصدار العلات التالية:

  • إصلاح تباطؤ كلازي الذي ظهر في 1.8. يمكن أن يصبح أسرع بـ 4 مرات الآن.
  • فُصل range-loop إلى range-loop-detach و range-loop-reference
  • إصلاح إيجابيات زائفة في -Wclazy-connect-non-signal
1.8 2020-11-22

يضيف هذا الإصدار الميزات التالية:

  • فحوصات جديدة:
  • qt6-qhash-signature
  • qt6-header-fixes
  • qt6-deprecated-api-fixes
  • use-chrono-in-qtimer
  • إصلاح آلي لـ missing-qobject-macro
1.7 2020-06-29

يضيف هذا الإصدار الميزات التالية:

  • فحوصات جديدة:
  • إشارة محملة بشكل زائد (overloaded)
  • تواقيع JNI غير صالحة
  • qstring-comparison-to-implicit-char
  • qt6-qlatin1string-to-u
  • heap-allocated-small-trivial-type: إيجابيات زائفة أقل

يصلح هذا الإصدار العلات التالية:

  • connect-non-signal: إصلاح حالة لم يجد فيها pmf
  • يُحذر qstring-arg عند استخدام QLatin1String::arg(int)، لأنه يقسر إلى QChar

بناء كلازي نفسه أسرع بنسبة 30%

1.6 2019-10-12

يضيف هذا الإصدار الميزات التالية:

  • فحوصات جديدة:
  • heap-allocated-small-trivial-type
  • signal-with-return-value
  • qproperty-type-mismatch، ساهم به Jean-Michaël Celerier

أزيل المستوى 3. نُقلت كافة فحوصات المستوى 3 إلى المستوى اليدوي. ليس من المنطقي تفعيلها جميعًا.

يجب النظر في كل منها بعناية.

رُفع الحد الأدنى لـ LLVM إلى 5.0

لم يعد كلازي يعيد كتابة الملفات مباشرة، لتجنب السباق عند قيام استدعاءات متوازية بتغيير نفس الترويسة.

يصدر كلازي الآن ملف yaml بالاستبدالات، ليُطبق باستخدام clang-apply-replacements.

بنفس الطريقة التي تتبعها أدوات clang الأخرى.

طريقة تفعيل إعادة كتابة الكود الآن هي: -Xclang -plugin-arg-clazy -Xclang export-fixes لـ clang

أو -export-fixes=somefile.yaml لـ clazy-standalone

أزيلت كافة معاملات الإصلاح الآلي ومتغيرات البيئة الخاصة بها

شكرًا لـ Christian Gagneraud لمساهمته بمصدر ملفات yaml للإصلاح الآلي!

يصلح هذا الإصدار العلات التالية:

  • إصلاح التراجعات مع LLVM 9.0
  • جُددت بنية الإصلاح الآلي بالكامل
1.5 2019-01-31

يضيف هذا الإصدار الميزات التالية:

  • فحوصات جديدة:
  • ifndef-define-typo
  • lowercase-qml-type-name
  • qrequiredresult-candidates
  • إصلاحات آلية جديدة:
  • يدعم range-loop الآن إضافة المراجع الناقصة أو مراجع الثوابت (const-ref)
  • يدعم range-loop الآن إضافة qAsConst()
  • يضيف function-args-by-ref الآن المراجع الناقصة أو مراجع الثوابت (const-ref) (تجريبي)
  • تقديم متغير البيئة CLAZY_FIXIT_SUFFIX

أزيل دعم الخيار الغامض -DCLAZY_BUILD_UTILS_LIB لتبسيط ملف CMakeLists.txt

تغير اسم ملحق كلازي من ClangLazy.so إلى ClazyPlugin.so

يحذر fully-qualified-moc-types الآن من قيم الإرجاع في slot/invokable أيضًا. يجب أن تكون مؤهلة بالكامل من أجل QML.

يصلح هذا الإصدار العلة التالية:

  • إصلاح انهيار (clang assert) في raw-environment-function
1.4 2018-09-23

يضيف هذا الإصدار الميزات التالية:

  • فحوصات جديدة:
  • connect-by-name
  • skipped-base-method
  • qstring-varargs
  • fully-qualified-moc-types
  • qt-keywords، مع تضمين الإصلاح الآلي
  • qhash-with-char-pointer-key
  • wrong-qevent-cast
  • static-pmf
  • raw-environment-function
  • empty-qstringliteral
  • يحذر auto-unexpected-qstringbuilder الآن أيضًا من دوال لامبدا التي تعيد QStringBuilder

تحسينات في الأداء

إضافة الخيار -header-filter=<regex> إلى clazy-standalone. فقط الترويسات التي تطابق التعبير النمطي هي التي

سيصدر لها تحذيرات، بالإضافة إلى ملف .cpp من وحدة الترجمة، والذي لا يُصفى أبدًا.

إضافة الخيار -ignore-dirs=<regex> إلى clazy-standalone، وما يعادله من متغير البيئة CLAZY_IGNORE_DIRS.

إضافة متغير البيئة CLAZY_HEADER_FILTER الذي يضيف الوظيفة المذكورة أعلاه لكل من كلازي و clazy-standalone

حصل unused-non-trivial-variable على خيار unused-non-trivial-variable-no-whitelist

حصل unused-non-trivial-variable على دعم القائمة السوداء والبيضاء للمستخدم

أصبح container-inside-loop فحصًا يدويًا بدلًا من المستوى 2

تغير اسم HiddenLevel إلى ManualLevel

يحذر connect-3arg-lambda الآن عند تمرير لامبدا إلى QTimer::singleShot() أو QMenu::addAction()

بدون كائن سياق

يحذر old-style-connect من QMenu::addAction() و QMessageBox::open() أيضًا الآن

1.3 2017-11-26

يضيف هذا الإصدار الميزات التالية:

  • فحوصات جديدة:
  • thread-with-slots
  • connect-3arg-lambda
  • qproperty-without-notify
  • virtual-signal
  • overridden-signal
  • qhash-namespace
  • const-signal-or-slot
  • lambda-unique-connection

أصبح missing-qobject-macro فحصًا من المستوى 2 بدلًا من المستوى 1. لأن المطورين قد يحذفون Q_OBJECT عمدًا.

إضافة الخيار -only-qt، والذي سيجعل كلازي يخرج مبكرًا في الملفات التي لا تتبع Qt. لهذا الغرض، يُعرف ملف Qt بأنه الملف الذي يُمرر له -DQT_CORE_LIB، وهذا هو المعتاد في معظم أنظمة البناء.

إضافة الخيار -qt-developer، فعند بناء Qt باستخدام كلازي سيلتزم بإرشادات محددة لـ Qt، وهي ليست كثيرة حاليًا ولكن القائمة ستكبر.

1.2 2017-07-08

يضيف هذا الإصدار الميزات التالية:

  • فحوصات جديدة:
  • install-event-filter
  • qcolor-from-literal
  • strict-iterators
  • connect-not-normalized

يصلح هذا الإصدار العلات التالية:

  • ملف clazy-standalone التنفيذي. يسمح بتشغيل كلازي مقابل قاعدة بيانات تجميع JSON بدلًا من كونه ملحقًا. لا يدعم clang-tidy تحميل وحدات خارجية (https://github.com/llvm/llvm-project/issues/32086) لذا يعد هذا حلًا جيدًا.
  • وضع qt-compat. يسمح بتعطيل الفحوصات الخاصة بـ Qt5 عبر تمرير -Xclang -plugin-arg-clazy -Xclang qt4-compat
  • يفحص returning-data-from-temporary الآن مصفوفات QByteArrays المؤقتة التي تُقسر إلى *char عند إرجاعها
  • يفحص returning-data-from-temporary الآن الإسناد أيضًا، وليس فقط جمل الإرجاع
  • يحذر unused-non-trivial-variable الآن من QList و QVector غير المستخدمة وأنواع كثيرة أخرى
  • أصبحت الفحوصات المبنية على ASTMatchers مدعومة الآن
  • أُسقط دعم clang 3.7 بسبب عدم توافق سورس ASTMatchers.
  • استخدم clazy v1.1 لدعم clang >= 3.6
  • لم يعد clazylib.so يُبنى افتراضيًا، يُبنى الملحق (ClangLazy.so) فقط. مرر -DCLAZY_BUILD_UTILS_LIB=ON لتفعيل مكتبة الأدوات إذا كنت تطور أدوات تستخدم دوال كلازي المساعدة، وهو ما لا تفعله على الأرجح.
  • أزيل الخيار CLAZY_INSTALL_NO_HEADERS. إما أن تثبت مكتبة الأدوات والترويسات أو لا شيء على الإطلاق. افتراضيًا لا يُثبت شيء، باستثناء الملحق وصفحات الدليل.
1.1 2017-02-20

يضيف هذا الإصدار الميزات التالية:

  • دعم macOS و ويندوز
  • فحوصات جديدة:
  • child-event-qobject-cast
  • ctor-missing-parent-argument
  • returning-data-from-temporary
  • qt-macros
  • base-class-event
  • connect-non-signal
  • incorrect-emit
  • tr-non-literal
  • إصلاحات ضد:
  • clang 4.0
  • Qt 5.9
  • ملاحظات:
  • تحسين في الأداء بنسبة 60%
  • إصلاح العديد من الإيجابيات الزائفة
1.0 2016-09-12
0.0.1 2015-06-10
الإصدار الأول