From scopy_dev_plugin
Validates Scopy plugin API classes against 7 rule categories for inheritance, Qt integration, null safety, attribute conversions, coverage, helpers, and naming.
npx claudepluginhub analogdevicesinc/scopy --plugin scopy_dev_pluginThis skill uses the workspace's default tool permissions.
Apply these 7 validation categories when reviewing or generating API classes for Scopy plugins.
Defines C++ patterns for Scopy plugin API classes: ApiObject inheritance, Q_INVOKABLE tool/widget methods, friend access to IIOWidgetGroup, and plugin lifecycle integration. For API and test automation development.
Reviews Qt6 C++ code via deterministic linting (60+ rules) and six parallel agents analyzing model contracts, ownership, threading, API correctness, error handling, performance. Reports high-confidence issues with mitigations.
Validates Claude Code plugin structure, JSON schemas, frontmatter format, security compliance, and marketplace catalog consistency. Triggers on 'validate plugin', 'check plugin', or 'verify' to run CI checks before commit.
Share bugs, ideas, or general feedback.
Apply these 7 validation categories when reviewing or generating API classes for Scopy plugins.
ApiObjectQ_OBJECT macro is present in the class bodySCOPY_<PLUGIN>_EXPORT) is on the class declaration<Plugin>Plugin * as its sole argumentfriend class <Plugin>_API is declared in the plugin headerm_api is declared as <Plugin>_API *m_api = nullptr; in the plugin headerinitApi() is declared in the plugin headerinitApi() is the last call in onConnect() before return truedelete m_api; m_api = nullptr; is the first statement in onDisconnect()ScopyJS::GetInstance()->registerApi(m_api) is called inside initApi()m_api->setObjectName("<name>") uses a lowercase, short name consistent with similar plugins.cpp file ends with #include "moc_<plugin>_api.cpp"Q_INVOKABLE method null-checks plugin/instrument members before accessing themreadFromWidget() / writeToWidget() null-check m_widgetGroup before useCross-reference the tool's IIOWidget lambdas to verify:
" dB"): getter strips the suffix before returning20*log10(1/linear) rounded to int; setter applies pow(10, -val/20)QStringList before calling writeToWidgetgetTools() method is presentreadWidget() / writeWidget() helpers are presentreadFromWidget(const QString &key) and writeToWidget(const QString &key, const QString &value) are declared as private helpersm_plugin->m_widgetGroup before accessing itQString; setter parameters use const QString &friend class insteadget<Attribute>() / set<Attribute>()