Files
gh-secondsky-sap-skills-ski…/references/java-javascript-dotnet-guide.md
2025-11-30 08:54:44 +08:00

1518 lines
46 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SAP API Style Guide - Complete Reference Documentation
## Java/JavaScript/.NET API Documentation (All 39 Files Consolidated)
**Source**: [https://github.com/SAP-docs/api-style-guide/tree/main/docs/40-java-javascript-and-msnet](https://github.com/SAP-docs/api-style-guide/tree/main/docs/40-java-javascript-and-msnet)
**Last Verified**: 2025-11-21
**Attribution**: Content derived from [SAP API Style Guide](https://github.com/SAP-docs/api-style-guide) (Licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/))
**Changes**: Consolidated from multiple source files, reorganized for progressive disclosure, added examples and templates.
**Comprehensive Reference**: All 39 markdown files extracted and organized
---
## TABLE OF CONTENTS
1. [Overview & Core Principles](#overview--core-principles)
2. [Documentation Comments Structure](#documentation-comments-structure)
3. [Java API Documentation Templates](#java-api-documentation-templates)
4. [Java & JavaScript Common Tags](#java--javascript-common-tags)
5. [JavaScript-Specific Tags](#javascript-specific-tags)
6. [.NET Documentation Tags](#net-documentation-tags)
7. [C/C++ Documentation Tags](#cc-documentation-tags)
8. [HTML Tags for Documentation](#html-tags-for-documentation)
9. [Best Practices & Guidelines](#best-practices--guidelines)
10. [Language-Specific Syntax](#language-specific-syntax)
---
## OVERVIEW & CORE PRINCIPLES
### Purpose of API Reference Documentation
- Auto-generates API reference documentation from source code in Java, JavaScript, and Microsoft .NET
- Standardizes how developers document code elements to enable professional, consistent API documentation
- Three essential areas covered:
1. **Documentation Comments** - Write according to specific rules
2. **Documentation Tags** - Recognized by API documentation generators
3. **Language-Specific Templates** - Standardized approaches for different languages
### Key Architectural Principles
- Object-oriented languages (Java, JavaScript, .NET, C/C++) share common API structural elements
- Documentation is extracted from source code comments rather than maintained separately
- Consistency across implementation ensures high-quality automated documentation generation
---
## DOCUMENTATION COMMENTS STRUCTURE
### General Structure Components
All documentation comments consist of two main components:
1. **Description** - Mandatory explanation of the code element
2. **Block Tags** - Special markers used by generation tools to structure output
### Language-Specific Comment Formats
#### Java and JavaScript
- Use specific comment syntax with delimiters
- Format: `/** ... */`
- Designated tag areas follow the description
#### .NET
- Supports XML-based documentation comments
- Alternative: External XML files using the `<include>` tag
- Format: `/// <tag>content</tag>`
### Placement Rules
- Place documentation comments **before** declarations of:
- Namespaces
- Classes
- Interfaces
- Class/interface members
### Mandatory vs. Optional
- **Description**: Mandatory when documenting classes, interfaces, class members, or interface members
- **Block Tags**: Used to provide structured metadata; many are optional
---
## JAVA API DOCUMENTATION TEMPLATES
### Template Categories (6 Primary Types)
#### 1. Overview Page Template
**Purpose**: Documents groups of packages; provides cover sheet for API documentation
**For Java APIs - Create `overview.html`**:
- Purpose of the API
- Main features in list format
- Package overview
- Links to external resources
**For JavaScript APIs - Create `readme.md`**:
- Clear title
- Brief description of functionality
- Bulleted links to major API components
**Key Recommendations**:
- Opening sentence should summarize API concisely
- Address: What problems does it solve? What are primary capabilities? How are packages organized?
- Include external references to guides, diagrams, help portals
- Optional but recommended addition
#### 2. Package Pages Template
**Purpose**: Documents individual Java packages using `package.html` file
**Mandatory Requirements**:
- "It is mandatory to use this file"
- Must be placed at appropriate folder level in source code
**Required Content Elements**:
1. **Purpose Statement** - Explain what package does
2. **Content Overview** - Describe grouped Java source files
3. **Background Information** - Provide context for understanding and usage
4. **Class Relationships** - Clarify connections between classes
**Format Guidelines**:
- Begin with summary sentence (doc comment format)
- Use HTML structure (DOCTYPE, head, body tags)
- Organize with paragraphs and lists
- Present progressively from general to specific
#### 3. Interface and Class Template
**Opening Statement Requirements**:
- Begin with imperative verb: "Allows you," "Enables you"
- OR use third-person singular indicative form
- Follow opening with supplementary details on subsequent lines
- Include background context and special considerations
**Two Documentation Approaches**:
**A) Classic API Format**
- Used for third-party developer applications
- Opening describes what interface "Represents/Contains/Provides/Defines"
- Example: "Allows you to manage connections in Data Access Layer internal connection pool"
- Follow with: "Provides basic methods to manage connections in context of use..."
**B) Service Provider Interface (SPI) Format**
- Designed for platform implementation (not direct developer use)
- Opening directs implementers to "Implement a service for" or "Provide an implementation of"
- Guide developers on implementation responsibility
- Simpler, more direct approach than Classic API
**Documentation Structure Elements**:
- Initial statement (verb or noun phrase)
- Supplementary information block
- Relevant cross-references (@see tags)
- Implementation requirements (for SPIs)
#### 4. Method Template
**Core Requirements**:
- "Background information needed to understand and use this method"
- "Special considerations that apply to this method"
- Description: mandatory first sentence plus optional additional content
- Block tags in specified order
**Standard Verb Usage by Method Type**:
| Method Type | Recommended Verb | Example |
|---|---|---|
| Constructor | Constructs | "Constructs a connection object" |
| Boolean | Indicates (whether...) | "Indicates whether the object can be used" |
| Getter | Returns/Retrieves/Gets | "Returns the connection parameter" |
| Setter | Defines/Sets | "Defines the connection timeout" |
| Other | Adds/Removes/Creates/Releases/[applicable verb] | "Creates a new database connection" |
**Block Tag Order**:
```
@param
@return
@throws
@see
@since
@deprecated
```
**Key Best Practices**:
1. **Default Values**: Setter descriptions should mention default property values
2. **Constructor Defaults**: Reference defaults if applicable
3. **Code Examples**: Use `<pre>` HTML tags within paragraph tags for code snippets
4. **Parameter Descriptions**: Format as "A(n) `type` object/value that [describes purpose]"
5. **Cross-References**: Use `@see` tags to link related methods (pair getters with setters)
6. **Parameter Order**: Document in same sequence as method signature
#### 5. Enum Template
**Enum-Level Documentation**:
- Start with "Provides..." or "An enumeration that provides..."
- Include background information needed for understanding and usage
- Note any special considerations applying to enum and its values
**Enum Value Documentation**:
- Begin with third-person singular verbs (e.g., "Allows," "Provides")
- OR use noun phrases
- Provide second line with additional context explaining behavior triggered by that value
- Single-line format using `/** Description */` is acceptable for brevity
**Documentation Styles**:
1. **Multi-line format**: Detailed explanations with `<p>` tags for paragraph breaks
2. **Single-line format**: Concise, straightforward descriptions
**Practical Example - SecurityStatus Enum**:
```
/**
* Provides the statuses that can apply to a business security profile...
*/
public enum SecurityStatus {
/**
* Specifies that all elements are [action] in a business security profile setting
*/
ELEMENT_STATUS
}
```
#### 6. Constant Template
**Starting the Description**:
- Begin with action verb in third-person singular form: "Specifies," "Defines," "Is"
- OR use noun phrase
**Information to Include**:
- "Background information needed to understand and use this constant"
- "Special considerations that apply to this constant"
**Syntax Options**:
**Multi-line Format (Recommended)**:
```java
/**
* [Verb/Noun phrase describing the constant]
* <p>Additional context or important notes</p>
*/
public static final constant_type constant_name = constant_value;
```
**Single-line Format (For Simple Constants)**:
```java
/** [Brief description of the constant] */
public static final constant_type constant_name = constant_value;
```
**Practical Examples**:
- Password constant: "The password used to log in to the CMS. This password must not contain any spaces."
- Simple constant: "The year of the date"
---
## JAVA & JAVASCRIPT COMMON TAGS
### Tag Organization Requirements
**Quality Standards**:
- "Always add value to your comment"
- Maintain consistency in tag ordering across documentation
- Tags are case-sensitive; block tag comments begin with uppercase letters
**Structural Rules**:
- Multiple instances of certain tags (like `@param`) allowed
- Some tags (like `@return`) appear only once
- "Group multiple block tags of the same type together"
- Avoid ending single-sentence tag comments with periods
- Don't duplicate automatically-generated information
**Recommended Tag Sequence** (Standard Order):
```
@param
@return
@throws
@see
@since
@deprecated
@version
```
### Comprehensive Tag Reference
#### @param Tag
**Purpose**: Documents method and function parameters
**Mandatory**: Yes - for every parameter in method and constructor descriptions
**Java Syntax**:
```java
@param parameter-name parameter-description
```
**JavaScript Syntax**:
```javascript
@param {type} parameter-name description
@param {type} [optional-name] description
@param {type1|type2} parameter-name description for union types
```
**Key Guidelines**:
- Use noun phrase to describe the value represented by the parameter
- Java: first letter lowercase, no hyphen before description
- JavaScript: first letter uppercase
- No periods at the end
- Document in signature order
- JavaScript: Mark optional parameters with square brackets `[parameter-name]`
- JavaScript: Multiple types using pipe separator `{type1|type2}`
- JavaScript: Use `{*}` for arbitrary types
- Describe defaults and possible values
**Practical Examples**:
```javascript
@param {String} url An absolute URL of the image
@param {Number} width The image width in pixels
@param {Number} [height] The image height in pixels (optional, defaults to width)
@param {String|Array} data Data to process - can be string or array
```
#### @return / @returns Tag
**Purpose**: Describes what a method or function returns
**Mandatory**: Yes - for all methods except constructors and void-returning methods
**Java Syntax**:
```java
@return description
```
**JavaScript Syntax**:
```javascript
@return {type1|type2|...} description
```
**Key Guidelines**:
- Start descriptions with noun phrase
- Begin with capital letter; avoid hyphens at start
- Do not conclude with a period
- Document all possible return scenarios, particularly `null` or Boolean values
- Java: wrap result name with `<code>...</code>` (object name, returned type, `null`, or Boolean value)
- JavaScript: Document multiple return types using `{type1|type2|...}` notation
- JavaScript: description is optional
**Example Patterns**:
```java
@return An <code>int</code> specifying the server port
@return <code>true</code> if the object can be used, <code>false</code> otherwise
```
```javascript
@return {db.ResultSet} The result set from the query
@return {String|Null} The configuration value or null if not found
```
#### @throws Tag
**Purpose**: Documents exceptions that methods may throw
**Mandatory**: Yes - for every exception a method can throw
**Java Syntax**:
```java
@throws type description
```
**JavaScript Syntax**:
```javascript
@throws {type} description
```
**Key Guidelines**:
- Describe exceptions using complete noun phrases as standard sentences
- Begin descriptions with capitalized words, avoiding hyphens at start
- Order multiple exceptions alphabetically by their names
- JavaScript: type parameter is optional (unlike Java)
- "You must have one tag for every exception" that method declares or throws
**Practical Examples**:
```java
@throws SDKException If an error occurs during the connection update
@throws NullPointerException If parameter name is null
@throws IllegalArgumentException If value exceeds maximum bounds
```
```javascript
@throws {$.db.SQLException} Throws an error on invalid parameter
@throws {Error} If connection is not established
```
#### @see Tag
**Purpose**: Creates references in "See Also" section; supports plain text, URLs, or labeled links
**Java Syntax Options**:
- Constants: `@see #constant`
- Constructors: `@see #constructor(Type, Type,...)`
- Methods: `@see #method(Type, Type,...)`
- Classes (qualified or unqualified): `@see ClassName` or `@see package.ClassName`
- Packages: `@see package`
- Plain text: `@see "free text"`
- Hyperlinks: `@see <a href="URL#value">text</a>`
- With optional label: `@see class-reference label`
**JavaScript Syntax Options**:
- Simple path: `@see setObject`
- With link tag: `@see {@link setObject} for more information`
- External URL: `@see {@link [http://sap.help.com|the](http://sap.help.com|the) SAP Help Portal}`
**Key Guidelines**:
- Use double quotes for plain text references in Java
- JavaScript: paths automatically generate hyperlinks
- JavaScript: Use `@link` tag for free text hyperlinks
- Apply sparingly to keep comment readable
- Add where it adds value, only for first occurrence of API names
- Order from least to fully-qualified signatures (constants → packages)
**Practical Examples**:
```java
@see Table
@see Table#getColumns()
@see TableColumn#setDataType(TableDataType) setDataType
@see com.example.api.Connection
```
```javascript
@see setObject
@see {@link setObject} for more information
@see {@link [http://sap.help.com|the](http://sap.help.com|the) SAP Help Portal}
```
#### @deprecated Tag
**Purpose**: Marks classes, interfaces, or members as no longer recommended for use
**Mandatory**: Block tag - must never be left blank
**Required Syntax Structure**:
```
@deprecated As of version NN, replaced by {@link class_name}
```
**Key Guidelines**:
1. **Version Information**: Start with "As of" followed by specific API version when deprecation occurred
2. **Replacement Reference**: Include "replaced by" with `@link` tag pointing to successor
3. **Additional Context**: May provide supplementary details about deprecation
4. Avoid specifying exact decommissioning timelines
**Practical Example**:
```java
/**
* Returns the SELECT clause of a SQL query.
*
* @return A <code>String</code> that contains the SELECT clause
* @deprecated As of version 2.4, replaced by {@link NewClass#getSelect()}
* <p>{@link #getNewClass()} allows you to retrieve a {@link NewClass} object.</p>
*/
String getSelect();
```
#### @since Tag
**Purpose**: Indicates API version when class, interface, or member was introduced or modified
**Syntax**:
```
@since version-number
```
**Key Characteristics**:
- Optional tag
- Used within JavaDoc-style comments
- Specifies version number when functionality became available
- Helps developers understand compatibility requirements
- Commonly applied to methods, classes, and interfaces
- Supports semantic versioning (e.g., 14.0.5)
**Practical Example**:
```java
/**
* Returns the connection parameter.
*
* @param name a <code>String</code> that represents the connection parameter name
* @since 14.0.5
*/
ConnectionParameter getParameter(String name);
```
#### @version Tag
**Purpose**: Marks internal version of a class or interface
**Syntax**:
```
@version version-number
```
**Key Characteristics**:
- Optional element
- Internal use only - NOT rendered in API documentation outputs
- Useful for tracking internal version history without exposing metadata
- Supports standard versioning schemes (e.g., semantic versioning like "14.1.2")
**Practical Example**:
```java
/**
* Gets the column description.
*
* @return A string that represents the description of the table column
* @version 14.1.2
*/
String GetDescription();
```
### Inline Java Tags (Embedded in Comments)
#### {@code text}
- Renders text in code font
- Prevents HTML markup and nested Javadoc tag interpretation
- Enables regular angle brackets instead of HTML entities
#### {@docRoot}
- Provides relative path from any generated page to documentation root
- Useful for referencing shared files across all pages
#### {@inheritDoc}
- Copies documentation from parent classes or interfaces
- Inserts at tag's location in current comment
#### {@link}
- Creates hyperlinks to package, class, interface, or member documentation
- Displays visible text labels in code font
- Java: `{@link #method(Type) label}`
- JavaScript: `{@link pathOrURL|label}` or `[label]{@link pathOrURL}`
#### {@linkplain}
- Functions identically to `{@link}`
- Displays labels in plain text formatting rather than code font
#### {@literal text}
- Displays text without interpreting HTML markup or nested Javadoc tags
- Complements `{@code}` for non-code scenarios
#### {@value [package.class#constant]}
- Shows current value of specified constant
- Optional parameter reference
---
## JAVASCRIPT-SPECIFIC TAGS
### Additional JavaScript Tags
#### @class (synonym: @constructor)
**Purpose**: Designates a function as a constructor requiring the `new` keyword
**Usage**: Allows describing the class itself rather than just the constructor function
**Example**:
```javascript
/**
* Creates a new Person.
* @class Represents a person.
*/
function Person(name) {
this.name = name;
}
```
#### @file (synonyms: @fileoverview, @overview)
**Purpose**: Documents entire file's purpose
**Placement**: At beginning of file in documentation comment
**Example**:
```javascript
/**
* @file
* This file contains utility functions for data manipulation
* including sorting, filtering, and transformation operations.
*/
```
#### @property (synonym: @prop)
**Purpose**: Streamlines documentation of static properties within classes, namespaces, or objects
**Features**: Supports nested property structures with type specifications
**Example**:
```javascript
/**
* @property {Number} width - The object width
* @property {Number} height - The object height
* @property {Object} config - Configuration object
* @property {String} config.name - Configuration name
*/
var defaults = {
width: 100,
height: 100,
config: {
name: 'default'
}
};
```
#### @example Tag (JavaScript-Specific)
**Purpose**: Inserts code examples into documentation comment blocks
**Key Guidelines**:
- Add empty lines and indent code lines for readability
- Titles are optional but enhance clarity
- Tag may be repeated multiple times in single comment
**Syntax**:
```javascript
@example [optional title]
[code content]
```
**Implementation Pattern - With Title**:
```javascript
/**
* Searches for matching records
*
* @example Using simple search
* var results = find("John");
*
* @example Using advanced filters
* var results = find("John", {exact: true, sortBy: "name"});
*/
```
**Best Practices**:
1. Use whitespace strategically for readability
2. Include inline comments explaining code
3. Show realistic, practical use cases
4. Format multi-line objects with consistent indentation
#### @namespace Tag
**Purpose**: Indicates JavaScript object serves as container for organizing classes, properties, and methods
**Syntax 1** (Documentation immediately precedes namespace):
```javascript
/**
* @namespace description
*/
var S = { ... };
```
**Syntax 2** (Indirect namespace definitions with optional type and name):
```javascript
/**
* Description
* @namespace [{type}] [name]
*/
```
**Implementation Guidelines**:
- Use Syntax 1 when comment block followed by code that defines namespace directly
- Use Syntax 2 for indirect namespace creation
- Ensure documented name matches actual implementation
- Optional type and name parameters available
**Practical Examples**:
```javascript
/**
* @namespace Defines namespace for UI library
*/
var ui = { ... };
/**
* Defines namespace for UI library
* @namespace sap.ui
*/
jQuery.sap.define('sap.ui');
```
---
## .NET DOCUMENTATION TAGS
### Tag Organization for .NET
**Recommended Tag Order** (Standard Sequence):
```
<include />
<summary>
<param>
<returns>
<exception>
<remarks>
<see />
<example>
```
### Comprehensive .NET Tag Reference
#### <summary> Tag
**Purpose**: Creates concise descriptions for namespaces, classes, interfaces, and their members
**Syntax**:
```xml
<summary>short-description</summary>
```
**Key Guidelines**:
- **Brevity and Accuracy**: "Write one summary statement containing a short and exact description"
- Begin with capital letter
- Conclude with period
- Mandatory for all documented elements
**Practical Example**:
```csharp
/// <summary>
/// Searches for a row that exactly matches a value or
/// partial set of values at the current index.
/// </summary>
public bool Find(short numColumns)
```
#### <param> Tag (.NET)
**Purpose**: Documents method and function parameters
**Syntax**:
```xml
<param name="parameter-name">parameter-description</param>
```
**Key Guidelines**:
- **Mandatory Usage**: "Mandatory in method and function descriptions for each parameter, even if obvious"
- Document in same sequence as method signature
- Include necessary information about each parameter (defaults, acceptable options)
- "Capitalize the first word in the parameter description"
- Each parameter warrants its own dedicated tag
**Practical Example**:
```csharp
/// <param name="term">The search input text</param>
/// <param name="exact">Boolean flag indicating precision of search (defaults to true)</param>
/// <param name="sortBy">The attribute used for ordering results</param>
public SearchResult Search(String term, Boolean exact, String sortBy)
```
#### <returns> Tag (.NET)
**Purpose**: Documents return values for methods or functions
**Syntax**:
```xml
<returns>returned-value-description</returns>
```
**Key Guidelines**:
- **Mandatory**: Required for methods/functions that return values other than void
- "Provide the necessary information about the returned value"
- "Capitalize the first word in the returned value description"
- Clarify all possible return scenarios
**Practical Example**:
```csharp
/// <returns>True when the property was successfully set;
/// otherwise, returns false.</returns>
public Boolean SetProperty(String name, String value)
```
#### <remarks> Tag
**Purpose**: Provides detailed descriptions for namespaces, classes, interfaces, and their members
**Syntax**:
```xml
<remarks>member-description</remarks>
```
**Key Guidelines**:
- **Placement**: Insert after `<summary>` tag
- **Content Strategy**: "Use only to provide detailed information not already mentioned in summary"
- Expand on summary content with supplementary context
**Practical Application**:
```csharp
/// <summary>
/// Searches for a specific row.
/// </summary>
/// <remarks>
/// Your client application must have an active connection to a database server
/// before it can call this method. An exception is thrown if the connection fails.
/// </remarks>
public bool Find(short numColumns)
```
#### <exception> Tag (.NET)
**Purpose**: Describes exceptions thrown during method execution
**Syntax**:
```xml
<exception cref="exception-name">
exception-description
</exception>
```
**Key Guidelines**:
- **Required**: For each method that throws an exception
- List multiple exceptions in alphabetical order by name
- "Capitalize first word in descriptions"
- `cref` attribute specifies exception type
- Tag body contains descriptive text
**Practical Example**:
```csharp
/// <exception cref="System.FormatException">
/// Thrown when the given string is not in the correct format.
/// </exception>
public void Parse(String input)
```
#### <see /> Tag (.NET)
**Purpose**: Optional XML element that adds reference link and creates See Also section
**Syntax**:
```xml
<see cref="class-or-interface-name[.member-name[(parameter1-name, ...)]]" />
```
**Key Guidelines**:
- **Parameter Lists**: Only include parameters when dealing with overloaded members
- **Parameter Ordering**: Begin with first parameter, continue through complete list
- **Multiple References**: Arrange progressing from simpler to more detailed
- Start with constants, move toward namespace specifications
**Practical Example**:
```csharp
/// <see cref="DownloadTableData"/>
/// <see cref="DBConnectionContext.GetDownloadData"/>
public interface DownloadData {
```
#### <example> Tag (.NET)
**Purpose**: Optional block element adding example sections demonstrating API usage
**Syntax**:
```xml
<example>
[description]
<code>
[sample code]
</code>
[optional results description]
</example>
```
**Key Guidelines**:
- **Optional**: For all members, but recommended
- **Placement**: After `<remarks>` tags, or after `<summary>` if no remarks
- Include descriptive text introducing example
- Wrap code samples in `<code>` tags
- Optionally describe output or behavior following code
**Practical Example**:
```csharp
/// <example>
/// The following code sample demonstrates how to open a connection:
/// <code>
/// SQLAConnection connection = new SQLAConnection();
/// connection.Open("server=localhost");
/// </code>
/// This establishes a connection to the local database server.
/// </example>
```
#### <include /> Tag
**Purpose**: Allows placing documentation comments in XML files instead of source code
**Syntax**:
```xml
<include file="file-name" path="tag-path[@name='member-name-reference']" />
```
**Key Guidelines**:
- Employ when documentation maintained separately from source code
- Keep class/interface member documentation consolidated in single XML file
- Use `class` to reference classes
- Use `ctor` for constructors
- For overloaded constructors, append numbers starting with 2 (`ctor`, `ctor2`, `ctor3`)
**Benefits**:
- Cleaner source code
- Centralized documentation repository
- Preserves full API documentation accessibility
- Maintains IDE integration
**Practical Implementation**:
```csharp
/// <include file="docs.xml" path="class[@name='MyClass']/method[@name='MyMethod']" />
public class MyClass {
public void MyMethod() { }
}
```
---
## C/C++ DOCUMENTATION TAGS
### Key Difference from Java
**Primary Distinction**: C and C++ documentation tags use **backslash prefix** (`\`) rather than `@` symbol
Examples: `\param`, `\return`, `\see`
### Standard Application
- "The recommended standards and guidelines for Java apply to C and C++ as well"
- Developers should follow similar documentation conventions
### Doxygen Compatibility
- Tags focus on compatibility with Doxygen generator
- Popular documentation tool for C and C++ projects
### C/C++ Specialized Tags
#### \file Tag
**Purpose**: Documents header files with mandatory summary and optional detailed information
**Syntax**:
```
\file file-name
```
**Key Guidelines**:
- **Placement**: Standalone documentation comment anywhere within header file
- `file-name` parameter is optional
- May include partial path for non-unique filenames
**Practical Example**:
```cpp
/** \file sacapi.h
* Main API header file.
* This file describes all the data types and entry points of the API.
*/
```
**Best Practices**:
- Keep summary sentence brief and precise
- Use optional detailed descriptions for context beyond summary
- Include filename parameter for clarity (though optional)
- Position documentation comment strategically for visibility
#### \mainpage Tag
**Purpose**: Generates documentation for main entry point of generated output
**Syntax**:
```
\mainpage [title]
```
**Key Characteristics**:
- **Placement**: Standalone documentation comment
- Can be in any existing header file or dedicated documentation file
- Title parameter is optional
- Use `notitle` to suppress title display entirely
**Implementation Example**:
```cpp
/** \mainpage ConnectionServer Component C++ API Reference
*
* This is the detailed description of the component.
*
* Main features include:
* - Connection management
* - Data transfer
* - Error handling
*/
namespace ConnectionServer
{
...
}
```
**Key Takeaway**: Creates documentation comment to `index.html` page or first LATEX chapter of generated output
---
## HTML TAGS FOR DOCUMENTATION
### Comprehensive HTML Tags Reference (26 Tags)
#### Text Formatting Tags
- **Bold**: `<b>` or `<strong>`
- Renders text in bold font weight
- **Italic**: `<em>`, `<i>`, or `<var>`
- Renders text in italic/slanted style
- **Monospaced**: `<tt>`, `<pre>`, `<kbd>`, `<dfn>`, or `<code>`
- Renders text in monospaced font (code font)
- `<pre>`: Preserves whitespace and line breaks
- `<code>`: Inline code elements
- `<kbd>`: Keyboard input
- **Small Text**: `<small>`
- Renders text at smaller size
- **Subscript/Superscript**: `<sub>`, `<sup>`
- `<sub>`: Renders below baseline
- `<sup>`: Renders above baseline
#### Structural Elements
- **Paragraphs**: `<p>`
- Separates content into logical blocks
- **Headers**: `<h1>` through `<h6>`
- Creates hierarchical heading structure (h1 largest, h6 smallest)
- **Line Breaks**: `<br>`
- Forces line break without creating new paragraph
- **Horizontal Rules**: `<hr>`
- Creates horizontal dividing line
- **Block Quotes**: `<blockquote>`
- Indents quoted text for emphasis
#### List Tags
- **Unordered Lists**: `<ul>` with `<li>`
- Creates bulleted list items
- **Ordered Lists**: `<ol>` with `<li>`
- Creates numbered list items
- **Definition Lists**: `<dl>`, `<dt>`, `<dd>`
- `<dl>`: Defines list container
- `<dt>`: Defines term/label
- `<dd>`: Defines definition/description
#### Table & Layout Tags
- **Table Structure**: `<table>`, `<tr>`, `<td>`, `<th>`, `<caption>`
- `<table>`: Container for table
- `<tr>`: Table row
- `<td>`: Table data cell
- `<th>`: Table header cell
- `<caption>`: Table title/caption
- **Centering**: `<center>`
- Centers content horizontally
#### Link Tags
- **Hyperlinks**: `<a href="...">link</a>`
- Creates clickable hyperlink to URL or anchor
### HTML Tag Usage Guidelines
- "Unless otherwise noted, tags terminate with a back slash: `</tagname>`"
- Use `<code>` extensively for keywords, API names, and code samples
- Employ `<p>` tags to maintain formatting in detailed descriptions
- Leverage `<pre>` tags within paragraph tags for code snippets
- Use semantic HTML tags for better structure and accessibility
### Common Documentation Usage Patterns
**Monospaced Code References**:
```
The <code>ConnectionString</code> property specifies the database connection.
```
**Code Examples**:
```
<p>Example usage:</p>
<pre>
SQLConnection conn = new SQLConnection();
conn.Open("server=localhost");
</pre>
```
**Structured Lists**:
```
<p>Supported options:</p>
<ul>
<li>Option 1: Fast processing</li>
<li>Option 2: Detailed logging</li>
<li>Option 3: Custom configuration</li>
</ul>
```
**Nested Headers**:
```
<h3>Configuration Steps</h3>
<p>Follow these steps to configure:</p>
```
---
## BEST PRACTICES & GUIDELINES
### Documentation Quality Standards
#### General Principles
1. **Always Add Value**: "Always add value to your comment"
- Avoid redundant documentation
- Don't duplicate automatically-generated information
2. **Consistency**: Maintain consistency in tag ordering across all documentation
- Use recommended tag sequence
- Group multiple tags of same type together
3. **Case Sensitivity**: Tags are case-sensitive
- Block tag comments begin with uppercase letters
- Follow naming conventions strictly
4. **Completeness**: Document all elements
- Even "obvious" parameters must be documented
- Include every possible exception
### Description Writing Guidelines
#### Summary Sentence Best Practices
- Avoid phrases like "This class" or "This method"
- Keep lines under 80 characters to prevent wrapping
- Write as standalone statement (appears in generated summaries)
- Be concise but complete
#### Action-Based Members
Start with third-person verbs such as:
- "adds," "retrieves," "provides," "returns"
- Example: "Retrieves a Role object"
#### Object-Based Members
Use noun phrases instead of verbs:
- Example: "Alias of a backend system"
#### Detailed Descriptions
- Add context without repeating API name or summary
- Omit implementation details unless critical for usage
- Use HTML tags to maintain formatting (`<p>`, `<code>`)
- Employ `<code>` tag for keywords, API names, code samples
### Tag-Specific Best Practices
#### @param Documentation
- Document in signature order
- Format as noun phrase describing value represented
- Mark optional parameters clearly (JavaScript: square brackets)
- Describe defaults and constraints
#### @return/@returns Documentation
- Wrap result names in `<code>` tags (Java)
- Document null or Boolean return scenarios explicitly
- Begin with noun phrase, capital letter, no period
#### @throws Documentation
- List exceptions in alphabetical order when multiple exist
- Complete noun phrase as standard sentence
- Capitalize first word, no hyphen at start
- Never use empty `@throws` tags
#### @see Documentation
- Use sparingly to maintain readability
- Apply where it adds value
- Use only for first occurrence of each API name
- Java: limit frequency for easy reading
- JavaScript: combine with `@link` for free text hyperlinks
#### @deprecated Documentation
- Never leave blank
- Always include version and replacement reference
- Use `{@link}` to point to successor
- Avoid exact decommissioning timelines
#### @since Documentation
- Include specific version number
- Support semantic versioning format
- Apply to methods, classes, interfaces
### Language-Specific Best Practices
#### Java-Specific
- Use `{@code}` for inline code snippets
- Use `<pre>` tags within `<p>` for code examples
- Use `{@link}` for cross-references sparingly
- Java: format parameters as noun phrases with `<code>` wrapping
#### JavaScript-Specific
- Mark optional parameters with square brackets: `[param-name]`
- Document union types with pipe separator: `{type1|type2}`
- Use `{*}` for arbitrary types
- Include type declarations with descriptions
#### .NET-Specific
- Mandatory `<summary>` tag for all documented elements
- Always use `<param>` for every parameter
- Always use `<exception>` for every thrown exception
- Use `<remarks>` only for supplementary information
- Follow XML tag syntax strictly: `<tag>content</tag>`
### Common Pitfalls to Avoid
**❌ DO NOT**:
- Leave tags empty or blank
- Duplicate auto-generated information
- Use second-person descriptions ("You should...")
- End single-sentence tag comments with periods
- Document parameters out of signature order
- Miss documenting any exception
- Use vague descriptions
- Include implementation details
- Skip parameters "because they're obvious"
- Provide exact decommissioning dates for deprecated items
**✅ DO**:
- Always add value
- Maintain consistent tag ordering
- Use third-person descriptions
- Document every parameter and exception
- Capitalize first words properly
- Use code formatting for API names
- Include background information
- Note special considerations
- Cross-reference related items
- Update version information regularly
---
## LANGUAGE-SPECIFIC SYNTAX
### Java Documentation Comments Syntax
#### Basic Structure
```java
/**
* [Summary sentence]
*
* [Detailed description - optional]
*
* @param parameter-name parameter-description
* @return description
* @throws ExceptionType description
* @see related-element
* @since version
* @deprecated As of version, replaced by {@link NewElement}
*/
```
#### Example - Complete Method Documentation
```java
/**
* Retrieves the user profile for the specified user ID.
*
* <p>This method queries the user database to retrieve the complete
* profile information. The profile includes personal details, preferences,
* and security settings.</p>
*
* <p>Special Considerations:</p>
* <ul>
* <li>The user must be authenticated before calling this method</li>
* <li>Large profiles may take several seconds to retrieve</li>
* <li>Cache is refreshed every 5 minutes</li>
* </ul>
*
* @param userId An <code>int</code> representing the unique user identifier
* @param includePreferences A <code>boolean</code> indicating whether to include
* user preferences (defaults to true)
* @return A <code>UserProfile</code> object containing complete user information,
* or <code>null</code> if the user does not exist
* @throws DatabaseException If a database error occurs while retrieving the profile
* @throws SecurityException If the current user lacks permission to access this profile
* @see UserProfile
* @see #updateUserProfile(int, UserProfile)
* @since 2.0.0
*/
public UserProfile getUserProfile(int userId, boolean includePreferences)
throws DatabaseException, SecurityException
```
### JavaScript Documentation Comments Syntax
#### Basic Structure
```javascript
/**
* [Summary sentence]
*
* [Detailed description - optional]
*
* @param {type} parameter-name parameter-description
* @param {type} [optional-name] description
* @return {type} description
* @throws {type} description
* @see related-element
* @since version
* @example [optional title]
* [code example]
*/
```
#### Example - Complete Function Documentation
```javascript
/**
* Searches for matching records in the database.
*
* This function provides flexible searching with support for exact matching,
* partial matching, and custom sorting. The search is case-insensitive by default.
*
* @param {String} query The search query string
* @param {Object} options Search options object
* @param {Boolean} [options.exact] Whether to require exact match (defaults to false)
* @param {String} [options.sortBy] Field name for sorting results
* @param {Number} [options.limit] Maximum number of results to return
* @return {Array.<Object>} Array of matching record objects
* @throws {Error} If the database connection is not established
* @throws {Error} If the query string is empty or invalid
* @example Basic search
* var results = search("John");
* @example Advanced search with options
* var results = search("john", {
* exact: true,
* sortBy: "name",
* limit: 50
* });
* @see {@link DatabaseConnection}
* @since 1.5.0
*/
function search(query, options) {
```
### .NET Documentation Comments Syntax
#### Basic Structure
```csharp
/// <summary>
/// [Brief description]
/// </summary>
/// <param name="parameter-name">parameter-description</param>
/// <returns>return-value-description</returns>
/// <exception cref="ExceptionType">exception-description</exception>
/// <remarks>
/// [Additional detailed information]
/// </remarks>
/// <see cref="RelatedElement"/>
/// <example>
/// [Code example]
/// </example>
```
#### Example - Complete Method Documentation
```csharp
/// <summary>
/// Searches for a user by email address.
/// </summary>
/// <param name="emailAddress">The email address of the user to find. Must be a valid email format.</param>
/// <param name="includeInactive">Boolean flag indicating whether to include inactive user accounts. Defaults to false.</param>
/// <returns>
/// A <see cref="User"/> object containing the user information,
/// or null if no user with the specified email is found.
/// </returns>
/// <exception cref="System.ArgumentNullException">
/// Thrown when emailAddress is null.
/// </exception>
/// <exception cref="System.ArgumentException">
/// Thrown when emailAddress is not in valid email format.
/// </exception>
/// <exception cref="System.Data.SqlException">
/// Thrown when a database error occurs during the search.
/// </exception>
/// <remarks>
/// This method performs a case-insensitive search in the user database.
/// The search operation is performed asynchronously and may take several seconds
/// for large user databases. Results are cached for 5 minutes to improve performance.
/// </remarks>
/// <example>
/// The following code demonstrates how to search for a user:
/// <code>
/// User user = FindUserByEmail("john.doe@example.com", false);
/// if (user != null)
/// {
/// Console.WriteLine("Found user: {0}", user.Name);
/// }
/// </code>
/// </example>
/// <see cref="User"/>
/// <see cref="User.Email"/>
public User FindUserByEmail(string emailAddress, bool includeInactive)
{
```
### C/C++ Documentation Comments Syntax (Doxygen)
#### Basic Structure
```cpp
/**
* \brief [Brief description]
*
* [Detailed description]
*
* \param parameter-name parameter-description
* \return return-description
* \throws ExceptionType exception-description
* \see related-element
* \since version
*/
```
#### Example - Complete Function Documentation
```cpp
/**
* \file database.h
* Database connection and query management interface.
* This file defines the core API for database operations including
* connection management, query execution, and result handling.
*/
/**
* \brief Retrieves a user profile by user ID.
*
* This function queries the user database to retrieve complete profile
* information including personal details and security settings.
*
* \param user_id The unique user identifier (must be positive)
* \param include_preferences Boolean flag to include user preferences
* \return Pointer to UserProfile structure containing user data,
* or NULL if user not found
* \throws DatabaseError If database connection fails
* \throws AuthenticationError If insufficient permissions
* \see UserProfile
* \see update_user_profile
* \since 2.0.0
*/
UserProfile* get_user_profile(int user_id, bool include_preferences);
```
---
## CONSOLIDATED TAG REFERENCE TABLE
### All Supported Tags by Language
| Tag | Java | JavaScript | .NET | C/C++ | Purpose |
|-----|------|-----------|------|-------|---------|
| @param / <param> | ✓ | ✓ | ✓ | \param | Document parameters |
| @return / <returns> | ✓ | ✓ | ✓ | \return | Document return values |
| @throws / <exception> | ✓ | ✓ | ✓ | N/A | Document exceptions |
| @see / <see> | ✓ | ✓ | ✓ | \see | Create cross-references |
| @deprecated | ✓ | ✓ | N/A | N/A | Mark deprecated elements |
| @since / \since | ✓ | ✓ | N/A | \since | Indicate version introduction |
| @version | ✓ | ✓ | N/A | N/A | Internal version tracking |
| <summary> | N/A | N/A | ✓ | N/A | Brief description (.NET) |
| <remarks> | N/A | N/A | ✓ | N/A | Detailed description (.NET) |
| <example> | ✓ | ✓ | ✓ | N/A | Code examples |
| @class / @constructor | N/A | ✓ | N/A | N/A | Constructor documentation |
| @file / \file | N/A | ✓ | N/A | ✓ | File documentation |
| @property | N/A | ✓ | N/A | N/A | Property documentation |
| @namespace | N/A | ✓ | N/A | N/A | Namespace documentation |
| <include> | N/A | N/A | ✓ | N/A | External documentation reference |
| \mainpage | N/A | N/A | N/A | ✓ | Main page documentation |
| Inline tags | {@code}, {@link}, {@docRoot}, {@inheritDoc}, {@linkplain}, {@literal}, {@value} | Standard | N/A | N/A | Inline formatting |
---
## CUSTOM & LEGACY TAGS
### Legacy Java Tags (Backward Compatibility)
| Tag | Purpose | Status |
|-----|---------|--------|
| @author | Indicates API author name/ID | Legacy - internal only |
| @brief | Concise description | Legacy - not recommended |
| @details | Comprehensive explanations | Legacy - not recommended |
| @examples | Mark example sections | Legacy - use <example> instead |
| @noextend | Prevent class/interface extension | Legacy - not recommended |
| @noimplement | Prevent interface implementation | Legacy - not recommended |
| @noinstantiate | Block class instantiation | Legacy - not recommended |
| @nooverride | Restrict method extension | Legacy - not recommended |
| @noreference | Restrict public member access | Legacy - not recommended |
| @hideinitializers | Conceal enum value docs | Legacy - not recommended |
| @showinitializers | Display enum value docs | Legacy - not recommended |
| @overloadedbrief | Summarize overloaded methods | Legacy - not recommended |
| @titlesuffix | Append text to section titles | Legacy - not recommended |
---
## KEY TAKEAWAYS & IMPLEMENTATION SUMMARY
### Critical Documentation Principles
1. **Source-Driven Documentation**: Documentation lives in source code, not separate files
- Enables automatic generation
- Reduces maintenance burden
- Ensures documentation stays current
2. **Standardized Structure**: Three-tier approach
- **Metadata Layer**: YAML frontmatter with name/description
- **Content Layer**: Detailed descriptions and examples
- **Metadata Tags**: Structured information for generation tools
3. **Language Consistency**: Core principles apply across Java, JavaScript, and .NET
- Verb-based method documentation
- Consistent tag ordering
- Consistent parameter documentation patterns
4. **Quality Over Quantity**: Add value with every documentation element
- Avoid redundancy
- Complete information coverage
- Clear, professional writing
5. **User-Centered Documentation**: Think about developer experience
- First-occurrence explanation completeness
- Clear cross-references
- Practical examples
- Special considerations highlighted
### Implementation Checklist
Before finalizing documentation:
- [ ] Description is mandatory and comprehensive
- [ ] Tags ordered: @param@return@throws@see@since@deprecated
- [ ] Every parameter has @param tag
- [ ] Non-void methods have @return tag
- [ ] Every exception has @throws tag
- [ ] Related items linked with @see tags
- [ ] Code elements wrapped in `<code>` tags
- [ ] Examples use `<pre>` tags with proper indentation
- [ ] Complex concepts explained without assuming prior knowledge
- [ ] No redundancy with auto-generated information
- [ ] Proper capitalization and punctuation
- [ ] Version information current and accurate
---
## REFERENCES & OFFICIAL STANDARDS
**Official SAP API Style Guide**: [https://github.com/SAP-docs/api-style-guide/tree/main/docs/40-java-javascript-and-msnet](https://github.com/SAP-docs/api-style-guide/tree/main/docs/40-java-javascript-and-msnet)
**All 39 Files Extracted & Consolidated**: 2025-11-21
**Compliance**: Follows official Anthropic skills specification and SAP standards
---
**End of Complete Reference Documentation**