Skip to content

AI Code Generation (Cmd+K) ​

Cursor AI's code generation feature allows you to generate code using natural language descriptions, a revolutionary capability that can significantly boost development efficiency. With a simple Cmd+K (Mac) or Ctrl+K (Windows/Linux) shortcut, you can activate this powerful feature.

Basic Concepts ​

1. How It Works ​

  • Natural Language Processing: Converts your descriptions into code
  • Context Understanding: Considers current file and project context
  • Smart Code Generation: Generates code following best practices

2. Use Cases ​

  • New Feature Development: Quickly implement new features
  • Code Refactoring: Optimize existing code
  • Bug Fixing: Solve code issues
  • Test Generation: Automatically generate test cases

Usage ​

1. Basic Operations ​

  1. Initiate Code Generation

    • Press Cmd/Ctrl + K
    • Select code in editor and press Cmd/Ctrl + K
    • Choose "AI Code Generation" from command palette
  2. Input Prompt

    • Use clear natural language descriptions
    • Provide necessary context information
    • Specify specific requirements and constraints
  3. Handle Results

    • Review generated code
    • Modify as needed
    • Integrate into project

2. Prompt Techniques ​

Feature Implementation ​

Create a React component to display user profile, including avatar, name and bio, with edit support

Code Conversion ​

Convert this JavaScript code to TypeScript, add appropriate type definitions

Bug Fixing ​

This code has performance issues, please help optimize it, focusing on loops and data structures

Advanced Features ​

1. Context Awareness ​

  1. Project Structure

    • Understands project architecture
    • Follows project conventions
    • Maintains code consistency
  2. Dependencies

    • Automatically handles imports
    • Resolves dependency conflicts
    • Recommends best practices
  3. Code Style

    • Matches existing style
    • Follows coding standards
    • Maintains consistency

2. Multi-file Operations ​

  1. Cross-file Generation
Create a complete CRUD feature, including API routes, data models and frontend components
  1. Related File Updates
Add new data field, update all related models, APIs and components

3. Smart Refactoring ​

  1. Code Optimization
Refactor this function using modern JavaScript features, improve readability and performance
  1. Pattern Application
Refactor this code to use observer pattern, while maintaining existing functionality

Best Practices ​

1. Prompt Writing ​

Clear Objectives ​

Create a data table component with pagination and search functionality, using TypeScript and React

Detailed Constraints ​

Implement a form validation function supporting required fields, email, phone number formats, returning detailed error messages

Performance Requirements ​

Implement a high-performance data processing function capable of handling millions of records, focusing on memory usage

2. Code Review ​

  1. Function Verification

    • Test generated code
    • Verify edge cases
    • Ensure error handling
  2. Code Quality

    • Check code style
    • Verify type definitions
    • Evaluate performance impact
  3. Security

    • Check for security vulnerabilities
    • Verify data handling
    • Prevent common vulnerabilities

Common Scenarios Examples ​

1. API Development ​

typescript
// Prompt: Create a RESTful API endpoint for user registration
export async function POST(req: Request) {
  try {
    const { email, password, name } = await req.json()

    // Data validation
    if (!email || !password || !name) {
      return new Response('Missing required fields', { status: 400 })
    }

    // Create user
    const user = await db.user.create({
      data: {
        email,
        password: await hashPassword(password),
        name,
      },
    })

    return new Response(JSON.stringify(user), {
      status: 201,
      headers: { 'Content-Type': 'application/json' },
    })
  }
  catch (error) {
    return new Response('Error creating user', { status: 500 })
  }
}

2. UI Component ​

typescript
// Prompt: Create a reusable modal component supporting custom title, content and action buttons
interface ModalProps {
  isOpen: boolean
  onClose: () => void
  title: string
  children: React.ReactNode
  actions?: React.ReactNode
}

export function Modal({
  isOpen,
  onClose,
  title,
  children,
  actions,
}: ModalProps) {
  if (!isOpen) return null

  return (
    <div className="fixed inset-0 bg-black/50 flex items-center justify-center">
      <div className="bg-white rounded-lg p-6 max-w-md w-full">
        <div className="flex justify-between items-center mb-4">
          <h2 className="text-xl font-bold">{title}</h2>
          <button onClick={onClose} className="text-gray-500 hover:text-gray-700">
            <span className="sr-only">Close</span>
            <XIcon className="h-6 w-6" />
          </button>
        </div>
        <div className="mb-6">{children}</div>
        {actions && (
          <div className="flex justify-end gap-4">{actions}</div>
        )}
      </div>
    </div>
  )
}

3. Utility Function ​

typescript
// Prompt: Create a data processing utility function supporting sorting, filtering and pagination
interface PaginationOptions {
  page: number
  pageSize: number
}

interface SortOptions {
  field: string
  order: 'asc' | 'desc'
}

interface FilterOptions {
  field: string
  value: any
}

export function processData<T>(
  data: T[],
  pagination?: PaginationOptions,
  sort?: SortOptions,
  filters?: FilterOptions[]
): {
    items: T[]
    total: number
  } {
  let result = [...data]

  // Apply filters
  if (filters?.length) {
    result = result.filter(item =>
      filters.every(filter => item[filter.field] === filter.value)
    )
  }

  // Apply sorting
  if (sort) {
    result.sort((a, b) => {
      const compareResult = a[sort.field] > b[sort.field] ? 1 : -1
      return sort.order === 'asc' ? compareResult : -compareResult
    })
  }

  // Apply pagination
  const total = result.length
  if (pagination) {
    const { page, pageSize } = pagination
    const start = (page - 1) * pageSize
    result = result.slice(start, start + pageSize)
  }

  return { items: result, total }
}

Troubleshooting ​

1. Common Issues ​

  • Generated code doesn't meet expectations: Optimize prompts
  • Inaccurate context understanding: Provide more relevant information
  • Performance issues: Simplify generation requests

2. Optimization Suggestions ​

  • Regularly update Cursor
  • Optimize project structure
  • Improve prompt quality

Tip

  • Use clear, specific natural language descriptions
  • Provide sufficient context information
  • Carefully review and test generated code

Note

  • Generated code requires manual review
  • Be cautious with sensitive information
  • Maintain code quality standards

Released under the MIT License