Skip to main content
Glama

CodeAnalysis MCP Server

by 0xjcf
TUTORIAL.md14.1 kB
--- title: "Implementing Metadata Standards Tutorial" version: 1.0.0 author: "Metadata Team" date: 2023-11-15 status: stable --- # Implementing Metadata Standards Tutorial This tutorial walks you through the process of implementing metadata standards in your codebase. By following these steps, you'll improve code discoverability, maintainability, and integration. ## Table of Contents 1. [Introduction](#introduction) 2. [Setting Up Your Standards](#setting-up-your-standards) 3. [Implementing File-Level Metadata](#implementing-file-level-metadata) 4. [Implementing Component-Level Metadata](#implementing-component-level-metadata) 5. [Implementing Project-Level Metadata](#implementing-project-level-metadata) 6. [Automating Metadata Management](#automating-metadata-management) 7. [Validating Metadata](#validating-metadata) 8. [Building a Culture of Metadata](#building-a-culture-of-metadata) 9. [Conclusion](#conclusion) ## Introduction ### Why Implement Metadata Standards? Metadata provides crucial context about your code that isn't always evident from the implementation itself. Well-structured metadata: - Makes it easier for new developers to understand your codebase - Provides clarity about authorship, versions, and dependencies - Enables automated documentation and analysis tools - Preserves knowledge that might otherwise be siloed or lost ### Prerequisites Before starting this tutorial, you should have: - A codebase where you want to implement metadata standards - Access to modify files, configuration, and potentially CI/CD pipelines - Basic understanding of documentation formats like JSDoc, docstrings, or YAML frontmatter ## Setting Up Your Standards ### 1. Define Your Metadata Fields Start by defining which metadata fields are required, recommended, and optional: #### Required Fields (Must Have) - Version - Description - Author/Owner #### Recommended Fields (Should Have) - Dependencies - License - Last Updated #### Optional Fields (Nice to Have) - Examples - Performance characteristics - Stability status ### 2. Create a Configuration File Create a standard configuration file that defines your metadata requirements: ```json // metadata-config.json { "version": "1.0.0", "description": "Metadata standards configuration", "requiredFields": { "all": ["version", "description", "author"], "javascript": ["file", "version", "author", "description"], "python": ["file", "version", "author", "description"], "markdown": ["title", "version", "author", "status"] }, "formatValidation": { "version": "^\\d+\\.\\d+\\.\\d+$", "date": "^\\d{4}-\\d{2}-\\d{2}$" } } ``` ### 3. Document Your Standards Create a guide that explains your metadata standards to the team: ```markdown // METADATA-STANDARDS.md # Metadata Standards This document outlines our metadata standards for all code files. ## Required Fields - **Version**: Current version in semver format (e.g., 1.0.0) - **Description**: Clear statement of the file's purpose - **Author**: Person or team responsible ## File-Type Specific Requirements ### JavaScript - Use JSDoc format with @tags - Include dependencies and examples ### Python - Use docstring format with @tags - Include module and class documentation ``` ## Implementing File-Level Metadata ### JavaScript/TypeScript Files Add a JSDoc comment block at the top of each file: ```javascript /** * @file user-service.js * @version 1.2.0 * @author UserTeam * @license MIT * * @description * Service for managing user accounts including creation, * updates, and authentication. * * @dependencies * - database-client * - authentication-utils * - logging-service */ // File implementation... ``` ### Python Files Add a docstring at the top of each file: ```python """ @file user_service.py @version 1.2.0 @author UserTeam @license MIT @description Service for managing user accounts including creation, updates, and authentication. @dependencies - database_client - authentication_utils - logging_service """ # File implementation... ``` ### Markdown Documentation Files Add YAML frontmatter at the top of each file: ```markdown --- title: "User Service Documentation" version: 1.2.0 author: "UserTeam" date: 2023-11-15 status: "published" tags: ["users", "authentication", "accounts"] --- # User Service This document describes the User Service component... ``` ## Implementing Component-Level Metadata ### Functions in JavaScript ````javascript /** * Creates a new user account. * * @function createUser * @param {Object} userData - User information * @param {string} userData.username - Unique username * @param {string} userData.email - User's email address * @param {string} userData.password - User's password * @returns {Promise<Object>} Newly created user object * @throws {ValidationError} If user data is invalid * * @example * ```javascript * const user = await createUser({ * username: 'johndoe', * email: 'john@example.com', * password: 'secure123' * }); * ``` * * @since 1.0.0 * @security Passwords are hashed before storage */ async function createUser(userData) { // Implementation... } ```` ### Classes in JavaScript ```javascript /** * Manages user authentication processes. * * @class UserAuthenticator * @implements {Authenticator} * @since 1.1.0 * @author AuthTeam */ class UserAuthenticator { /** * Creates a new authenticator instance. * * @constructor * @param {Object} options - Configuration options * @param {number} [options.tokenExpiry=3600] - Token expiry in seconds * @param {boolean} [options.enableMFA=false] - Whether to enable multi-factor auth */ constructor(options = {}) { // Implementation... } /** * Authenticates a user with credentials. * * @method authenticate * @param {string} username - The username * @param {string} password - The password * @returns {Promise<Object>} Authentication result with token * @throws {AuthenticationError} If credentials are invalid */ async authenticate(username, password) { // Implementation... } } ``` ### Functions in Python ````python def create_user(user_data): """ Creates a new user account. @function create_user @param user_data Dictionary containing user information - username: Unique username - email: User's email address - password: User's password @returns Newly created user object @throws ValidationError If user data is invalid @example ```python user = create_user({ 'username': 'johndoe', 'email': 'john@example.com', 'password': 'secure123' }) ``` @since 1.0.0 @security Passwords are hashed before storage """ # Implementation... ```` ### Classes in Python ```python class UserAuthenticator: """ Manages user authentication processes. @class UserAuthenticator @implements Authenticator @since 1.1.0 @author AuthTeam """ def __init__(self, options=None): """ Creates a new authenticator instance. @constructor @param options Configuration options dictionary - token_expiry: Token expiry in seconds (default: 3600) - enable_mfa: Whether to enable multi-factor auth (default: False) """ # Implementation... def authenticate(self, username, password): """ Authenticates a user with credentials. @method authenticate @param username The username @param password The password @returns Authentication result with token @throws AuthenticationError If credentials are invalid """ # Implementation... ``` ## Implementing Project-Level Metadata ### Package.json for JavaScript/TypeScript ```json { "name": "user-management-service", "version": "1.3.0", "description": "Service for managing user accounts and authentication", "author": "User Management Team <user-team@example.com>", "license": "MIT", "repository": { "type": "git", "url": "https://github.com/example/user-management-service.git" }, "keywords": ["users", "authentication", "accounts", "service"], "bugs": { "url": "https://github.com/example/user-management-service/issues" }, "homepage": "https://example.com/docs/user-service" } ``` ### Setup.py for Python ```python from setuptools import setup, find_packages setup( name="user-management-service", version="1.3.0", description="Service for managing user accounts and authentication", author="User Management Team", author_email="user-team@example.com", license="MIT", url="https://github.com/example/user-management-service", packages=find_packages(), classifiers=[ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.9" ], keywords="users authentication accounts service" ) ``` ## Automating Metadata Management ### Create Templates Create file templates with your metadata structure: ```javascript // templates/js-file.js /** * @file {{filename}} * @version 0.1.0 * @author {{author}} * @license {{license}} * * @description * {{description}} * * @dependencies * {{#each dependencies}} * - {{this}} * {{/each}} */ ``` ### Set Up Linting Configure linters to validate your metadata: **.eslintrc.js for JavaScript** ```javascript module.exports = { plugins: ["jsdoc"], rules: { "jsdoc/require-description": "error", "jsdoc/require-param": "error", "jsdoc/require-returns": "error", "jsdoc/check-param-names": "error", }, }; ``` **pylint config for Python** ```ini [MASTER] init-hook='from pylint.checkers import docparams; docparams.DocstringParameterChecker.options.docstring_style = "sphinx"' [MESSAGES CONTROL] enable=C0111,C0112 [BASIC] good-names=i,j,k,ex,Run,_ ``` ### Integrate with CI/CD Add metadata validation to your CI pipeline: **.github/workflows/validate-metadata.yml** ```yaml name: Validate Metadata on: push: branches: [main] pull_request: branches: [main] jobs: validate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Node.js uses: actions/setup-node@v2 with: node-version: "16" - name: Install dependencies run: npm install -g metadata-validator - name: Validate metadata run: metadata-validator --config metadata-config.json ``` ## Validating Metadata ### Create a Validation Script ```javascript // validate-metadata.js const fs = require("fs"); const path = require("path"); const glob = require("glob"); const config = require("./metadata-config.json"); function validateFile(filePath) { const content = fs.readFileSync(filePath, "utf8"); const ext = path.extname(filePath); let metadata; if (ext === ".js" || ext === ".ts") { metadata = extractJSDocMetadata(content); } else if (ext === ".py") { metadata = extractPythonDocstringMetadata(content); } else if (ext === ".md") { metadata = extractMarkdownFrontmatterMetadata(content); } // Check required fields const requiredFields = config.requiredFields.all.concat( config.requiredFields[getLanguageFromExt(ext)] || [] ); const missing = requiredFields.filter((field) => !metadata[field]); if (missing.length > 0) { console.error( `${filePath}: Missing required fields: ${missing.join(", ")}` ); return false; } // Validate formats for (const [field, pattern] of Object.entries(config.formatValidation)) { if (metadata[field] && !new RegExp(pattern).test(metadata[field])) { console.error( `${filePath}: Invalid format for ${field}: ${metadata[field]}` ); return false; } } return true; } // Run validation on all files glob("src/**/*.{js,ts,py,md}", (err, files) => { if (err) { console.error("Error finding files:", err); process.exit(1); } let failCount = 0; for (const file of files) { if (!validateFile(file)) { failCount++; } } if (failCount > 0) { console.error(`Validation failed for ${failCount} files`); process.exit(1); } else { console.log("All files passed metadata validation!"); } }); ``` ### Run Regular Audits Schedule regular metadata audits to ensure ongoing compliance: ```bash # Run this monthly or as part of your release process npm run validate-metadata # Generate a report of metadata coverage npm run metadata-coverage-report ``` ## Building a Culture of Metadata ### 1. Include in Code Reviews Add metadata review to your code review checklist: - [ ] Does the file have all required metadata? - [ ] Is the description clear and accurate? - [ ] Are the dependencies correctly listed? - [ ] Is the version appropriately updated? ### 2. Provide Tools and Training - Create easy-to-use tools for adding and validating metadata - Conduct training sessions on the importance of metadata - Share success stories of how good metadata helped the team ### 3. Lead by Example Ensure that core libraries and important components have exemplary metadata to serve as references for the team. ### 4. Measure and Celebrate Progress Track metadata compliance over time and celebrate improvements: ``` Metadata Coverage Report - November 2023 ---------------------------------------- Overall coverage: 87% (up from 72% last month) Files with complete metadata: 342/392 Top contributor: @developer-name (added metadata to 47 files) ``` ## Conclusion Implementing metadata standards is a journey, not a destination. Start small, be consistent, and gradually build a culture where good metadata is valued and maintained. Remember that the ultimate goal isn't perfect compliance with standards, but rather creating a more understandable, maintainable, and useful codebase for everyone who works with it. --- _This tutorial was created by the Metadata Team. If you have questions or suggestions, please contact us at metadata-team@example.com._

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/0xjcf/MCP_CodeAnalysis'

If you have feedback or need assistance with the MCP directory API, please join our Discord server