VS Code چیست؟ آموزش کامل Visual Studio Code برای برنامهنویسی و هوش مصنوعی
در این آموزش VS Code را از صفر یاد میگیرید؛ از نصب، افزونهها و Terminal تا Git، Debug و تست. در پایان یک API خلاصهساز با Python، FastAPI و مدلهای هوش مصنوعی درواره میسازیم.
Visual Studio Code که بیشتر با نام VS Code یا ویاس کد شناخته میشود، یکی از محبوبترین ویرایشگرهای کد در میان برنامهنویسان است. سبکبودن، پشتیبانی از زبانهای مختلف، Terminal داخلی، یکپارچگی با Git، امکانات Debug و مجموعه بزرگی از Extensionها باعث شده است VS Code برای بسیاری از پروژههای برنامهنویسی انتخاب مناسبی باشد.
VS Code را میتوان برای توسعه با Python، JavaScript، TypeScript، PHP، Go، Java، C#، C++، HTML، CSS و بسیاری زبانهای دیگر استفاده کرد. این ویرایشگر همچنین به یکی از محیطهای اصلی استفاده از دستیارها و Agentهای برنامهنویسی مبتنی بر هوش مصنوعی تبدیل شده است.
در این آموزش، VS Code را از صفر یاد میگیریم و در پایان یک پروژه عملی میسازیم: API خلاصهسازی متن با Python و FastAPI که به مدلهای هوش مصنوعی درواره متصل میشود. سپس همان پروژه را داخل VS Code اجرا، Debug، تست و با REST Client آزمایش میکنیم.
VS Code چیست؟
VS Code یک ویرایشگر کد رایگان برای Windows، macOS و Linux است. این نرمافزار امکانات پایهای مانند ویرایش کد، جستوجو، Terminal، Git، Debug و مدیریت Extension را در یک محیط یکپارچه ارائه میکند.
طبق معرفی رسمی Visual Studio Code، VS Code علاوه بر ویرایش کد، از قابلیتهایی مانند IntelliSense، Source Control، Debugging و Testing پشتیبانی میکند و امکانات آن از طریق Extensionها قابل گسترش است.
VS Code یک IDE کاملاً ثابت و از پیش پیکربندیشده برای یک زبان خاص نیست؛ بلکه ویرایشگری توسعهپذیر است که میتوانید آن را متناسب با نوع پروژه خود تنظیم کنید.
برای مثال، اگر Python Extension را نصب کنید، قابلیتهای زیر اضافه میشوند:
- تشخیص Python Interpreter
- تکمیل خودکار کد
- اجرای فایل Python
- مدیریت Virtual Environment
- اجرای تستها
- Debugging
- نمایش خطاها
- Code Navigation
- Refactoring
- Formatting و Linting با ابزارهای تکمیلی
تفاوت VS Code و Visual Studio چیست؟
Visual Studio Code و Visual Studio دو محصول متفاوتاند.
VS Code:
- سبکتر است.
- روی Windows، macOS و Linux اجرا میشود.
- برای زبانهای مختلف قابل تنظیم است.
- بر Extensionها تکیه دارد.
- برای پروژههای وب، Python، JavaScript و Cloud بسیار رایج است.
- سریعتر نصب و اجرا میشود.
- نسخه رایگان دارد.
Visual Studio:
- یک IDE کاملتر و سنگینتر است.
- بیشتر در اکوسیستم .NET و C++ شناخته میشود.
- ابزارهای داخلی گستردهتری برای پروژههای سازمانی دارد.
- نسخهها و قابلیتهای متفاوتی ارائه میکند.
- در بعضی سناریوهای .NET، Windows و C++ امکانات تخصصیتری دارد.
انتخاب میان این دو به نوع پروژه بستگی دارد. برای Python، JavaScript، TypeScript، توسعه وب، API و پروژههای هوش مصنوعی مبتنی بر ابزارهای متنباز، VS Code انتخاب رایجی است.
چرا VS Code محبوب است؟
دلایل مهم محبوبیت VS Code عبارتاند از:
- نصب و اجرای نسبتاً سریع
- پشتیبانی از سیستمعاملهای مختلف
- Extensionهای متنوع
- Terminal داخلی
- یکپارچگی با Git
- Debugger قابل توسعه
- IntelliSense
- مدیریت Workspace
- تنظیمات قابل شخصیسازی
- پشتیبانی از Remote Development
- قابلیت ساخت Profileهای مختلف
- پشتیبانی از زبانهای برنامهنویسی متعدد
- امکان استفاده از دستیارهای هوش مصنوعی
- میانبرهای کاربردی
- جستوجو و جایگزینی قدرتمند
آیا VS Code برای مبتدیان مناسب است؟
بله. رابط VS Code نسبتاً ساده است و میتوانید با نصب تعداد کمی Extension کار را شروع کنید.
بااینحال، نصب تعداد زیادی Extension از همان ابتدا توصیه نمیشود. هر Extension ممکن است منابع سیستم مصرف کند، تنظیمات جدیدی اضافه کند یا با Extension دیگری تداخل داشته باشد.
برای شروع، فقط Extensionهای موردنیاز زبان و پروژه خود را نصب کنید.
نصب VS Code
نسخه مناسب سیستمعامل خود را از صفحه رسمی دانلود کنید:
نصب در Windows
فایل نصب را اجرا کنید. هنگام نصب، گزینههای زیر میتوانند مفید باشند:
- افزودن VS Code به PATH
- افزودن گزینه Open with Code به منوی فایلها
- افزودن گزینه Open with Code به منوی پوشهها
- ثبت VS Code بهعنوان ویرایشگر فایلهای پشتیبانیشده
پس از نصب، PowerShell را باز کنید:
code --version
اگر نسخه نمایش داده شود، فرمان code در PATH قرار دارد.
نصب در macOS
پس از نصب و انتقال برنامه به Applications، VS Code را باز کنید.
برای فعالکردن فرمان code:
- Command Palette را باز کنید.
- عبارت زیر را جستوجو کنید:
Shell Command: Install 'code' command in PATH
- فرمان را اجرا کنید.
- Terminal را دوباره باز کنید.
سپس:
code --version
نصب در Linux
برای نصب VS Code در Linux از بسته یا Repository رسمی متناسب با توزیع خود استفاده کنید. روش نصب در Ubuntu، Fedora و سایر توزیعها ممکن است متفاوت باشد.
پس از نصب:
code --version
بازکردن اولین پروژه
یک پوشه بسازید:
mkdir vscode-project
cd vscode-project
پوشه را در VS Code باز کنید:
code .
علامت نقطه به معنی پوشه فعلی است.
میتوانید از منوی VS Code نیز استفاده کنید:
File > Open Folder
بهتر است بهجای بازکردن تکفایلها، پوشه اصلی پروژه را باز کنید؛ زیرا بسیاری از قابلیتهای VS Code مانند Search، Git، Workspace Settings، Testing و Debugging بر اساس پوشه پروژه کار میکنند.
آشنایی با رابط VS Code
بر اساس راهنمای رسمی رابط کاربری VS Code، رابط اصلی VS Code از چند بخش تشکیل شده است.
Activity Bar
نوار عمودی کنار پنجره که دسترسی به بخشهای اصلی را فراهم میکند:
- Explorer
- Search
- Source Control
- Run and Debug
- Extensions
- Testing، در صورت فعالبودن
- بخشهای اضافهشده توسط Extensionها
Primary Side Bar
پنل کناری که محتوای بخش انتخابشده را نمایش میدهد. برای مثال، در Explorer فهرست فایلها و پوشهها دیده میشود.
Editor
بخش اصلی برای نمایش و ویرایش فایلهاست. میتوانید چند فایل را در Tabهای مختلف باز کنید یا Editor را به چند قسمت تقسیم کنید.
Panel
معمولاً در پایین پنجره قرار دارد و شامل این بخشهاست:
- Problems
- Output
- Debug Console
- Terminal
- Ports، در برخی محیطها
Status Bar
نوار پایین VS Code که اطلاعاتی مانند موارد زیر را نمایش میدهد:
- Branch فعال Git
- خط و ستون Cursor
- نوع فایل
- Encoding
- پایان خط
- Python Interpreter
- وضعیت خطاها و هشدارها
- وضعیت بعضی Extensionها
Command Center
در نسخههای جدید VS Code، بخش بالایی پنجره امکان جستوجوی فایلها و اجرای برخی فرمانها را فراهم میکند.
Command Palette چیست؟
Command Palette یکی از مهمترین بخشهای VS Code است. تقریباً بیشتر قابلیتهای برنامه از طریق آن قابل دسترسیاند.
در Windows و Linux:
Ctrl + Shift + P
در macOS:
Cmd + Shift + P
نمونه فرمانها:
Python: Select Interpreter
Git: Clone
Format Document
Developer: Reload Window
Preferences: Open User Settings
Debug: Select and Start Debugging
Extensions: Show Recommended Extensions
اگر محل یک قابلیت را در منوها نمیدانید، ابتدا آن را در Command Palette جستوجو کنید.
میانبرهای مهم VS Code
بازکردن Command Palette
Ctrl + Shift + P
بازکردن سریع فایل
Ctrl + P
میتوانید بخشی از نام فایل را تایپ کنید.
جستوجو در فایل فعلی
Ctrl + F
جستوجو در تمام پروژه
Ctrl + Shift + F
جایگزینی در فایل فعلی
Ctrl + H
بازکردن Terminal
Ctrl + `
ذخیره فایل
Ctrl + S
ذخیره تمام فایلها
Ctrl + K
Ctrl + S
رفتن به تعریف
F12
مشاهده تعریف بدون ترک فایل
Alt + F12
تغییر نام Symbol
F2
Format Document
در Windows و Linux:
Shift + Alt + F
بازکردن Run and Debug
Ctrl + Shift + D
بازکردن Source Control
Ctrl + Shift + G
Comment یا Uncomment خط
Ctrl + /
جابهجایی خط
Alt + Up
Alt + Down
کپی خط به بالا یا پایین
Shift + Alt + Up
Shift + Alt + Down
بعضی میانبرها با توجه به سیستمعامل یا Keymap متفاوتاند. فهرست کامل را میتوانید با این فرمان باز کنید:
Preferences: Open Keyboard Shortcuts
Explorer و مدیریت فایلها
در Explorer میتوانید:
- فایل بسازید.
- پوشه بسازید.
- نام فایل را تغییر دهید.
- فایل را جابهجا کنید.
- چند فایل را همزمان باز کنید.
- ساختار پروژه را مشاهده کنید.
- فایل را در File Explorer سیستم نشان دهید.
برای ساخت فایل جدید:
- روی پوشه پروژه کلیک کنید.
- گزینه New File را بزنید.
- نام فایل را وارد کنید.
مثال:
app.py
requirements.txt
README.md
بازکردن چند Editor کنار یکدیگر
برای تقسیم Editor:
Ctrl + \
یا روی Tab فایل راستکلیک کنید و گزینه Split را انتخاب کنید.
این قابلیت برای مقایسه فایلها یا مشاهده همزمان کد و تست مفید است.
برای مثال:
app.py tests/test_app.py
requirements.txt README.md
IntelliSense چیست؟
IntelliSense مجموعهای از قابلیتهای کمک به کدنویسی است:
- تکمیل خودکار
- نمایش امضای Function
- نمایش Type
- پیشنهاد Variable و Method
- نمایش Documentation
- تشخیص بعضی خطاها
- Import خودکار
- Code Navigation
کیفیت IntelliSense به زبان، Extension، تنظیمات و ساختار پروژه بستگی دارد.
برای Python معمولاً ترکیب Python Extension و Pylance قابلیتهای مناسبی فراهم میکند.
Extension چیست؟
Extension افزونهای است که قابلیت جدیدی به VS Code اضافه میکند.
بازکردن Extensions:
Ctrl + Shift + X
هنگام نصب Extension این موارد را بررسی کنید:
- نام Publisher
- تعداد نصب
- امتیازها و نظرها
- تاریخ بهروزرسانی
- مستندات
- Permissionها و قابلیتها
- Repository پروژه، در صورت وجود
Extensionها میتوانند به فایلها، Terminal یا Workspace دسترسی داشته باشند. افزونههای موردنیاز را از Publisher معتبر و Marketplace رسمی انتخاب کنید.
Extensionهای پیشنهادی برای Python
Python
شناسه:
ms-python.python
قابلیتها:
- انتخاب Interpreter
- اجرای Python
- Testing
- Debugging
- مدیریت Environment
- اتصال به ابزارهای Lint و Format
Pylance
شناسه:
ms-python.vscode-pylance
برای تکمیل خودکار، Type Analysis و Code Navigation استفاده میشود.
Python Debugger
شناسه:
ms-python.debugpy
امکان Debug برنامههای Python را فراهم میکند.
REST Client
شناسه:
humao.rest-client
برای ارسال درخواست HTTP از داخل فایلهای .http کاربرد دارد.
افزونه REST Client اجازه میدهد درخواست API را داخل پروژه ذخیره و پاسخ را در VS Code مشاهده کنید. صفحه رسمی REST Client در Marketplace جزئیات قابلیتها و تنظیمات آن را ارائه میکند.
نصب Extension از Command Palette
Command Palette را باز کنید و بنویسید:
Extensions: Install Extensions
یا از Terminal:
code --install-extension ms-python.python
code --install-extension ms-python.vscode-pylance
code --install-extension ms-python.debugpy
code --install-extension humao.rest-client
مشاهده Extensionهای نصبشده:
code --list-extensions
حذف Extension:
code --uninstall-extension EXTENSION_ID
Workspace Trust چیست؟
وقتی یک پروژه ناشناس را باز میکنید، VS Code ممکن است درباره اعتماد به Workspace سؤال کند.
Workspace میتواند شامل مواردی باشد که فرمان اجرا میکنند:
- Task
- Debug Configuration
- Extension Recommendation
- Workspace Setting
- Script
- Notebook
- Hook
به پروژههایی که منبع آنها را نمیشناسید بدون بررسی اعتماد نکنید. ابتدا فایلهای تنظیمات، Scriptها و وابستگیها را بررسی کنید.
تنظیمات VS Code
VS Code دو روش اصلی برای ویرایش Settings دارد:
- رابط گرافیکی
- فایل JSON
بازکردن Settings:
Ctrl + ,
بازکردن فایل تنظیمات:
Preferences: Open User Settings (JSON)
User Settings
روی تمام پروژههای کاربر اعمال میشوند.
Workspace Settings
فقط روی پروژه فعلی اعمال میشوند و معمولاً در این مسیر قرار دارند:
.vscode/settings.json
Workspace Settings برای تنظیمات مشترک یک پروژه مناسباند؛ اما بهتر است قبل از Commit مطمئن شوید تنظیمات فقط شامل موارد عمومی پروژهاند و مسیر یا اطلاعات شخصی ندارند.
تنظیمات کاربردی عمومی
نمونه settings.json:
{
"editor.formatOnSave": true,
"editor.rulers": [88],
"editor.minimap.enabled": true,
"files.trimTrailingWhitespace": true,
"files.insertFinalNewline": true,
"terminal.integrated.scrollback": 10000,
"workbench.editor.enablePreview": false
}
توضیح:
formatOnSave: هنگام ذخیره، Formatter فعال را اجرا میکند.rulers: خط راهنمای طول کد را نشان میدهد.trimTrailingWhitespace: فاصلههای انتهای خط را حذف میکند.insertFinalNewline: در انتهای فایل خط جدید قرار میدهد.scrollback: تعداد خطوط قابل نگهداری در Terminal را افزایش میدهد.enablePreview: از جایگزینشدن سریع Tabهای Preview جلوگیری میکند.
قبل از فعالکردن Format on Save، Formatter مناسب زبان را انتخاب و رفتار آن را روی پروژه بررسی کنید.
Profile در VS Code چیست؟
Profile مجموعهای از تنظیمات، Extensionها، میانبرها و چیدمان رابط است.
میتوانید Profileهای جدا داشته باشید:
- Python
- Frontend
- Data Science
- DevOps
- پروژه سبک و بدون Extension اضافی
- آموزش
- پروژه سازمانی
طبق مستندات رسمی VS Code Profiles، Profileها برای ساخت، اشتراکگذاری و جابهجایی میان مجموعههای مختلف تنظیمات و Extensionها استفاده میشوند.
برای ساخت Profile:
Profiles: Create Profile
Terminal داخلی VS Code
VS Code دارای Terminal یکپارچه است. بازکردن:
Ctrl + `
ساخت Terminal جدید:
Terminal: Create New Terminal
انتخاب Shell پیشفرض:
Terminal: Select Default Profile
گزینههای معمول:
- PowerShell
- Command Prompt
- Git Bash
- Bash
- Zsh
- WSL
Terminal داخلی همان فرمانهای Terminal سیستم را اجرا میکند، اما مسیر شروع آن معمولاً پوشه Workspace است.
پروژه عملی: ساخت API خلاصهساز هوش مصنوعی در VS Code
در این پروژه یک API میسازیم که متن را دریافت و با یکی از مدلهای هوش مصنوعی درواره خلاصه میکند.
ساختار پروژه:
vscode-darvareh-summarizer/
├── .vscode/
│ ├── extensions.json
│ ├── launch.json
│ └── settings.json
├── tests/
│ └── test_app.py
├── app.py
├── requirements.txt
├── requests.http
├── .env.example
├── .env
├── .gitignore
└── README.md
ساخت پروژه
Terminal داخلی VS Code را باز کنید:
mkdir vscode-darvareh-summarizer
cd vscode-darvareh-summarizer
code .
اگر پوشه از قبل در VS Code باز است، فقط دو فرمان اول کافی است.
ساخت Virtual Environment
در Windows PowerShell:
python -m venv .venv
.venv\Scripts\Activate.ps1
در Linux و macOS:
python3 -m venv .venv
source .venv/bin/activate
راه دیگر استفاده از Command Palette است:
Python: Create Environment
طبق راهنمای محیطهای Python در VS Code، VS Code میتواند محیطهایی مانند venv، Conda، Poetry، Pyenv و ابزارهای دیگر را شناسایی و مدیریت کند.
انتخاب Python Interpreter
Command Palette:
Python: Select Interpreter
سپس Python مربوط به .venv را انتخاب کنید.
در Status Bar باید مسیر یا نام Environment پروژه دیده شود.
بررسی در Terminal:
python --version
مسیر Python در Linux و macOS:
which python
در PowerShell:
Get-Command python
مسیر باید به .venv پروژه اشاره کند.
ساخت requirements.txt
fastapi>=0.115,<1.0
uvicorn[standard]>=0.34,<1.0
openai>=1.68,<3.0
python-dotenv>=1.1,<2.0
pydantic>=2.10,<3.0
pytest>=8.3,<9.0
httpx>=0.28,<1.0
نصب:
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
ساخت .env.example
DARVAREH_API_KEY=YOUR_DARVAREH_API_KEY
DARVAREH_MODEL_ID=YOUR_MODEL_ID
در درواره ثبتنام و API Key ایجاد کنید. شناسه مدل مناسب را نیز از صفحه مدلهای درواره بردارید.
فایل محلی .env را بسازید.
در Linux و macOS:
cp .env.example .env
در PowerShell:
Copy-Item .env.example .env
مقادیر واقعی فقط داخل .env قرار میگیرند.
ساخت .gitignore
.env
.env.*
!.env.example
.venv/
venv/
__pycache__/
*.py[cod]
.pytest_cache/
.mypy_cache/
.ruff_cache/
.coverage
htmlcov/
*.log
ساخت app.py
import os
from contextlib import asynccontextmanager
from typing import Literal
from dotenv import load_dotenv
from fastapi import FastAPI, HTTPException, Request
from openai import OpenAI
from pydantic import BaseModel, Field
load_dotenv()
class SummaryRequest(BaseModel):
text: str = Field(min_length=20, max_length=30000)
style: Literal["short", "bullet", "detailed"] = "short"
max_tokens: int = Field(default=800, ge=100, le=2000)
STYLE_INSTRUCTIONS = {
"short": "متن را در یک پاراگراف کوتاه و دقیق خلاصه کن.",
"bullet": "متن را بهصورت نکات بولتدار و منظم خلاصه کن.",
"detailed": (
"یک خلاصه نسبتاً کامل با نکات اصلی، نتیجهگیری "
"و مفاهیم مهم تهیه کن."
),
}
@asynccontextmanager
async def lifespan(app: FastAPI):
api_key = os.getenv("DARVAREH_API_KEY")
model_id = os.getenv("DARVAREH_MODEL_ID")
app.state.model_id = model_id
app.state.ai_client = None
if api_key and model_id:
app.state.ai_client = OpenAI(
api_key=api_key,
base_url="https://api.darvareh.ir/v1",
timeout=60,
max_retries=2,
)
yield
if app.state.ai_client is not None:
app.state.ai_client.close()
app = FastAPI(
title="Darvareh AI Summarizer",
version="1.0.0",
lifespan=lifespan,
)
@app.get("/health")
def health(request: Request):
return {
"status": "ok",
"ai_configured": request.app.state.ai_client is not None,
}
@app.post("/summarize")
def summarize(payload: SummaryRequest, request: Request):
client = request.app.state.ai_client
model_id = request.app.state.model_id
if client is None or not model_id:
raise HTTPException(
status_code=503,
detail="تنظیمات API هوش مصنوعی کامل نیست.",
)
instruction = STYLE_INSTRUCTIONS[payload.style]
try:
response = client.chat.completions.create(
model=model_id,
messages=[
{
"role": "system",
"content": (
"You are a Persian text summarization assistant. "
"Preserve facts and do not add unsupported claims."
),
},
{
"role": "user",
"content": f"{instruction}\n\nمتن:\n{payload.text}",
},
],
temperature=0.2,
max_tokens=payload.max_tokens,
)
summary = response.choices[0].message.content
if not summary:
raise HTTPException(
status_code=502,
detail="مدل خلاصه قابل استفادهای برنگرداند.",
)
return {
"summary": summary,
"style": payload.style,
"model": model_id,
}
except HTTPException:
raise
except Exception:
raise HTTPException(
status_code=502,
detail="دریافت پاسخ از سرویس هوش مصنوعی ناموفق بود.",
)
Base URL درواره:
https://api.darvareh.ir/v1
Endpoint درخواست Chat Completions:
https://api.darvareh.ir/v1/chat/completions
اجرای پروژه در Terminal
uvicorn app:app --reload
خروجی باید نشان دهد برنامه روی این آدرس اجرا شده است:
http://127.0.0.1:8000
مستندات خودکار FastAPI:
http://127.0.0.1:8000/docs
Health Endpoint:
http://127.0.0.1:8000/health
برای توقف برنامه:
Ctrl + C
ساخت Workspace Settings
پوشه .vscode را بسازید:
mkdir .vscode
فایل .vscode/settings.json:
{
"editor.formatOnSave": true,
"editor.rulers": [88],
"files.trimTrailingWhitespace": true,
"files.insertFinalNewline": true,
"python.terminal.activateEnvironment": true,
"python.testing.pytestEnabled": true,
"python.testing.unittestEnabled": false,
"python.testing.pytestArgs": [
"tests"
],
"files.exclude": {
"**/__pycache__": true,
"**/.pytest_cache": true
}
}
پیشنهاد Extensionهای پروژه
فایل .vscode/extensions.json:
{
"recommendations": [
"ms-python.python",
"ms-python.vscode-pylance",
"ms-python.debugpy",
"humao.rest-client"
]
}
وقتی شخص دیگری پروژه را باز کند، VS Code میتواند Extensionهای پیشنهادی را نمایش دهد. این فایل Extensionها را بدون اجازه کاربر نصب نمیکند.
Debug در VS Code چیست؟
Debugging به شما اجازه میدهد اجرای برنامه را مرحلهبهمرحله بررسی کنید.
قابلیتهای معمول Debugger:
- Breakpoint
- Step Over
- Step Into
- Step Out
- Continue
- مشاهده Variableها
- Watch Expression
- Call Stack
- Debug Console
- Conditional Breakpoint
طبق مستندات رسمی Debugging در VS Code، Breakpoint اجرای برنامه را در خط موردنظر متوقف میکند تا بتوانید وضعیت متغیرها و جریان برنامه را بررسی کنید.
ساخت launch.json
فایل .vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "FastAPI: Uvicorn",
"type": "debugpy",
"request": "launch",
"module": "uvicorn",
"args": [
"app:app",
"--reload"
],
"justMyCode": true,
"envFile": "${workspaceFolder}/.env"
}
]
}
برای شروع Debug:
- فایل
app.pyرا باز کنید. - کنار شماره خط داخل Function
summarizeکلیک کنید. - وارد بخش Run and Debug شوید.
- تنظیم
FastAPI: Uvicornرا انتخاب کنید. - کلید
F5را بزنید. - یک درخواست به
/summarizeارسال کنید.
برنامه روی Breakpoint متوقف میشود و میتوانید متغیرهایی مانند payload، instruction و model_id را بررسی کنید.
تفاوت Run و Debug
Run برنامه را معمولاً بدون اتصال Debugger اجرا میکند.
Debug برنامه را همراه Debugger اجرا میکند و قابلیتهایی مانند Breakpoint و مشاهده Variable را در اختیار شما میگذارد.
برای اجرای بدون Debug:
Ctrl + F5
برای اجرای همراه Debug:
F5
Breakpoint شرطی
روی Breakpoint راستکلیک و گزینه Edit Breakpoint را انتخاب کنید.
برای مثال، توقف فقط زمانی که Style برابر detailed است:
payload.style == "detailed"
Conditional Breakpoint در مسیرهایی که چندین بار اجرا میشوند، از توقف غیرضروری جلوگیری میکند.
Debug Console
هنگام توقف روی Breakpoint میتوانید در Debug Console عبارتهایی را آزمایش کنید:
payload.style
len(payload.text)
STYLE_INSTRUCTIONS[payload.style]
عبارتهایی را اجرا نکنید که وضعیت برنامه یا داده واقعی را ناخواسته تغییر دهند.
ساخت تست برای پروژه
پوشه تست:
mkdir tests
فایل tests/test_app.py:
from fastapi.testclient import TestClient
from app import app
def test_health_endpoint():
with TestClient(app) as client:
response = client.get("/health")
assert response.status_code == 200
data = response.json()
assert data["status"] == "ok"
assert "ai_configured" in data
def test_rejects_short_text():
with TestClient(app) as client:
response = client.post(
"/summarize",
json={
"text": "کوتاه",
"style": "short",
"max_tokens": 400,
},
)
assert response.status_code == 422
def test_rejects_invalid_style():
with TestClient(app) as client:
response = client.post(
"/summarize",
json={
"text": "این متن برای آزمایش اعتبارسنجی طول کافی دارد.",
"style": "unknown",
"max_tokens": 400,
},
)
assert response.status_code == 422
این تستها درخواست واقعی به مدل ارسال نمیکنند و فقط Health Endpoint و Validation ورودی را بررسی میکنند.
اجرای تست از Terminal
pytest -q
اجرای یک فایل:
pytest tests/test_app.py -q
اجرای یک تست مشخص:
pytest \
tests/test_app.py::test_health_endpoint \
-q
اجرای تست از رابط VS Code
Extension پایتون میتواند تستهای pytest و unittest را شناسایی کند. جزئیات در راهنمای رسمی تست Python در VS Code آمده است.
مراحل:
- بخش Testing را باز کنید.
- گزینه Configure Python Tests را انتخاب کنید.
pytestرا انتخاب کنید.- پوشه
testsرا مشخص کنید. - تست یا مجموعه تست را اجرا کنید.
از همان بخش میتوانید تست را با Debugger اجرا کنید.
آزمایش API با REST Client
فایل requests.http:
@baseUrl = http://127.0.0.1:8000
### Health Check
GET {{baseUrl}}/health
Accept: application/json
### Short Summary
POST {{baseUrl}}/summarize
Content-Type: application/json
Accept: application/json
{
"text": "هوش مصنوعی مولد میتواند بر اساس الگوهای آموختهشده متن، تصویر، صدا یا کد تولید کند. کیفیت خروجی به مدل، ورودی، تنظیمات و دادههای زمینه بستگی دارد و نتیجه باید متناسب با کاربرد بررسی شود.",
"style": "short",
"max_tokens": 500
}
### Bullet Summary
POST {{baseUrl}}/summarize
Content-Type: application/json
Accept: application/json
{
"text": "Docker برنامه و وابستگیهای آن را در قالب Image بستهبندی میکند. Container نمونه در حال اجرای Image است. Docker Compose نیز برای تعریف و اجرای چند سرویس در یک فایل YAML استفاده میشود.",
"style": "bullet",
"max_tokens": 600
}
بالای هر درخواست گزینه Send Request نمایش داده میشود. ابتدا پروژه را اجرا و سپس روی این گزینه کلیک کنید.
کلید API در فایل requests.http قرار نگرفته است؛ زیرا درخواست ابتدا به Backend محلی ارسال میشود و Backend کلید را از .env میخواند.
استفاده مستقیم از API درواره با REST Client
برای آزمایش مستقیم Endpoint درواره میتوانید فایل جداگانه محلی بسازید؛ اما کلید API را داخل فایل Commitشده قرار ندهید.
فایل نمونه بدون کلید واقعی:
POST https://api.darvareh.ir/v1/chat/completions
Authorization: Bearer YOUR_DARVAREH_API_KEY
Content-Type: application/json
{
"model": "YOUR_MODEL_ID",
"messages": [
{
"role": "user",
"content": "VS Code را در سه جمله توضیح بده."
}
],
"temperature": 0.3,
"max_tokens": 500
}
اگر این فایل حاوی کلید واقعی است، آن را در .gitignore قرار دهید یا از متغیرهای محیطی محلی REST Client استفاده کنید.
بهتر است Secretها در سامانه مدیریت Secret محیط توسعه یا فایل محلی خارج از Git نگهداری شوند.
Git در VS Code
VS Code رابط داخلی برای کار با Git دارد، اما از Git نصبشده روی سیستم استفاده میکند.
طبق مستندات Source Control در VS Code، رابط Git در VS Code در کنار Command Line کار میکند و تغییرات ایجادشده در هر دو محیط یک مخزن مشترک را مدیریت میکنند.
بررسی نصب Git:
git --version
فعالکردن Git در پروژه:
git init
VS Code فایلهای تغییرکرده را در بخش Source Control نمایش میدهد.
مراحل Commit در VS Code
- بخش Source Control را باز کنید.
- فایل تغییرکرده را انتخاب و Diff آن را بررسی کنید.
- روی علامت
+برای Stage کلیک کنید. - پیام Commit را وارد کنید.
- Commit را ثبت کنید.
معادل Command Line:
git status
git diff
git add .
git commit -m "feat: add AI summarization API"
قبل از Commit مطمئن شوید .env در فهرست تغییرات نیست:
git check-ignore -v .env
مشاهده Diff
با کلیک روی فایل تغییرکرده، VS Code نسخه قبلی و فعلی را کنار هم نمایش میدهد.
رنگهای معمول:
- سبز: خط اضافهشده
- قرمز: خط حذفشده
- آبی: خط تغییرکرده
قبل از Stage و Commit، تمام Diff را بررسی کنید تا Secret، Log، فایل موقت یا تغییر آزمایشی ناخواسته وارد تاریخچه نشود.
رفع Merge Conflict در VS Code
اگر دو Branch یک قسمت مشابه را تغییر دهند، Conflict ایجاد میشود. VS Code فایلهای دارای Conflict را در Source Control نمایش میدهد.
میتوانید:
- تغییر فعلی را انتخاب کنید.
- تغییر ورودی را انتخاب کنید.
- هر دو تغییر را نگه دارید.
- فایل را دستی اصلاح کنید.
- از Merge Editor سهطرفه استفاده کنید.
پس از حل Conflict:
git add FILE_NAME
git commit
کد حلشده را قبل از Commit اجرا و تست کنید.
Search در پروژه
جستوجوی سراسری:
Ctrl + Shift + F
میتوانید از این قابلیتها استفاده کنید:
- Match Case
- Whole Word
- Regular Expression
- Include Files
- Exclude Files
- Replace in Files
برای جستوجوی متغیر محیطی:
DARVAREH_API_KEY
میتوانید بررسی کنید که کلید یا نام متغیر در چه فایلهایی استفاده شده است.
Symbol Search
نمایش Symbolهای فایل فعلی:
Ctrl + Shift + O
جستوجوی Symbol در Workspace:
Ctrl + T
برای پروژههای بزرگ، این روش سریعتر از جستوجوی دستی در پوشههاست.
Refactoring در VS Code
بسته به زبان و Extension میتوانید عملیات زیر را انجام دهید:
- Rename Symbol
- Extract Method
- Extract Variable
- Organize Imports
- Add Import
- Move Symbol
- Quick Fix
بازکردن Quick Fix:
Ctrl + .
تغییر نام Symbol با F2 معمولاً تمام Referenceهای شناساییشده را تغییر میدهد؛ اما بعد از Refactor باید تستها را اجرا و Diff را بررسی کنید.
Format و Lint چه تفاوتی دارند؟
Formatter ظاهر کد را یکدست میکند:
- فاصلهها
- تورفتگی
- طول خط
- شکستن خطوط
- Quoteها، بسته به تنظیمات
Linter مشکلات احتمالی را پیدا میکند:
- Import استفادهنشده
- Variable تعریفنشده
- الگوهای نامناسب
- خطاهای سبکی
- بعضی خطاهای منطقی
برای Python میتوانید ابزارهایی مانند Ruff، Black یا سایر گزینههای مناسب پروژه را بررسی کنید. بهتر است تیم روی یک تنظیم مشترک توافق کند و آن را در فایلهای پروژه ثبت کند.
Problems Panel
بازکردن:
Ctrl + Shift + M
این پنل خطاها و هشدارهای تولیدشده توسط Language Server، Linter، Compiler یا Extensionها را نمایش میدهد.
هر خطا لزوماً مانع اجرای برنامه نیست و هر هشدار نیز بیاهمیت نیست. پیام، فایل و خط مربوط را بررسی کنید.
Multi-cursor در VS Code
افزودن Cursor با کلیک:
Alt + Click
انتخاب رخداد بعدی:
Ctrl + D
انتخاب تمام رخدادهای عبارت فعلی:
Ctrl + Shift + L
Multi-cursor برای ویرایش تکراری مفید است، اما در تغییرهای گسترده بهتر است از Rename Symbol یا Refactoring ساختاری استفاده کنید تا Referenceها دقیقتر شناسایی شوند.
Snippet چیست؟
Snippet قالب آماده کد است. برای مثال، در بعضی زبانها با نوشتن یک عبارت کوتاه و زدن Tab، ساختار کامل Function یا Component تولید میشود.
ساخت Snippet شخصی:
Snippets: Configure Snippets
نمونه Snippet برای Python:
{
"FastAPI Health Endpoint": {
"prefix": "fastapi-health",
"body": [
"@app.get(\"/health\")",
"def health():",
" return {\"status\": \"ok\"}"
],
"description": "Create a FastAPI health endpoint"
}
}
Tasks در VS Code
Task برای اجرای فرمانهای تکراری استفاده میشود.
فایل .vscode/tasks.json:
{
"version": "2.0.0",
"tasks": [
{
"label": "Run tests",
"type": "shell",
"command": "python",
"args": [
"-m",
"pytest",
"-q"
],
"group": {
"kind": "test",
"isDefault": true
},
"problemMatcher": []
},
{
"label": "Run FastAPI",
"type": "shell",
"command": "python",
"args": [
"-m",
"uvicorn",
"app:app",
"--reload"
],
"isBackground": true,
"problemMatcher": []
}
]
}
اجرای Task:
Tasks: Run Task
فایل Task بخشی از Workspace است و ممکن است فرمان Shell اجرا کند. قبل از اجرای Task پروژههای ناشناس، محتوای آن را بررسی کنید.
اجرای پروژه با یک میانبر
میتوانید Task پیشفرض تست را با میانبر اجرا کنید:
Ctrl + Shift + B
رفتار دقیق این میانبر به تنظیمات Build Task بستگی دارد. برای Taskهای دیگر از Command Palette استفاده کنید.
هوش مصنوعی در VS Code
VS Code امکان نصب Extensionهای مختلف برنامهنویسی با هوش مصنوعی را فراهم میکند. این ابزارها ممکن است قابلیتهای زیر داشته باشند:
- تکمیل کد
- تولید Function
- توضیح کد
- رفع خطا
- Refactoring
- تولید تست
- تحلیل پروژه
- ساخت فایل
- اجرای فرمان با تأیید کاربر
- کار در حالت Agent
- اتصال به مدلهای مختلف
بعضی ابزارها امکان اتصال به API سازگار با OpenAI را دارند. در این حالت میتوانید Base URL درواره را تنظیم کنید:
https://api.darvareh.ir/v1
سپس با یک API Key درواره و شناسه مدل مناسب، ابزار را به مدل موردنظر متصل کنید.
پیش از دادن دسترسی ویرایش فایل یا اجرای Terminal به یک Agent:
- تغییرات Git را Commit کنید.
- Permissionها را بررسی کنید.
- فرمانهای پیشنهادی را قبل از اجرا بخوانید.
- فایلهای Secret را از Context خارج کنید.
- محدوده پروژه را مشخص کنید.
- Diff تغییرات را بررسی کنید.
- تستها را اجرا کنید.
- هزینه و تعداد درخواستها را پایش کنید.
انتخاب مدل برای برنامهنویسی در VS Code
نوع مدل را بر اساس وظیفه انتخاب کنید:
- تکمیل سریع کد: مدل سریع و کمهزینه
- رفع خطای پیچیده: مدل Reasoning
- تحلیل Repository بزرگ: مدل با Context Window مناسب
- تولید تست: مدل قوی در کدنویسی و درک ساختار
- Refactoring: مدل دقیق با توان دنبالکردن محدودیتها
- مستندسازی: مدل متنی متعادل
- تحلیل تصویر رابط کاربری: مدل Multimodal
قیمت، مشخصات و شناسه مدلهای در دسترس را در صفحه مدلهای درواره بررسی کنید.
همگامسازی Settings
VS Code میتواند بخشی از تنظیمات، Extensionها و میانبرها را میان دستگاهها همگام کند. پیش از فعالسازی، مشخص کنید چه دادههایی باید Sync شوند.
فایلهای پروژه، .env و Secretهای برنامه نباید صرفاً با اتکا به Settings Sync مدیریت شوند.
خطاهای رایج VS Code
فرمان code پیدا نمیشود
نمونه:
code: command not found
در Windows، VS Code را با گزینه افزودن به PATH نصب یا Terminal را دوباره باز کنید.
در macOS، این فرمان را از Command Palette اجرا کنید:
Shell Command: Install 'code' command in PATH
Python Interpreter اشتباه انتخاب شده است
Command Palette:
Python: Select Interpreter
محیط .venv پروژه را انتخاب کنید.
در Terminal:
python -c "import sys; print(sys.executable)"
مسیر باید به Virtual Environment اشاره کند.
Import در Terminal کار میکند اما در Editor خطا دارد
ممکن است Terminal و Language Server از Interpreterهای متفاوت استفاده کنند.
موارد زیر را بررسی کنید:
- Interpreter انتخابشده در Status Bar
- مسیر
python - نصب Package داخل همان Environment
- Reload Window
Developer: Reload Window
Extension کار نمیکند
مراحل بررسی:
- Extension فعال باشد.
- Workspace در حالت Restricted نباشد.
- فایل با Language Mode درست باز شده باشد.
- Output مربوط به Extension را بررسی کنید.
- VS Code را Reload کنید.
- تداخل با Extensionهای مشابه را بررسی کنید.
بازکردن Output:
View: Toggle Output
Terminal Environment را فعال نمیکند
Terminal فعلی را ببندید و Terminal جدید بسازید.
سپس:
Python: Select Interpreter
و:
Python: Create Terminal
Debugger روی Breakpoint متوقف نمیشود
بررسی کنید:
- Configuration درست انتخاب شده باشد.
- فایل در مسیر اجرای واقعی قرار داشته باشد.
- کد مربوط واقعاً اجرا شود.
justMyCodeبا نیاز شما سازگار باشد.- Debugger به Process درست متصل شده باشد.
- پروژه بهجای Run با Debug اجرا شده باشد.
REST Client گزینه Send Request را نشان نمیدهد
فایل باید پسوند .http یا .rest داشته باشد و Language Mode درست انتخاب شده باشد.
نمونه:
requests.http
فایل .env خوانده نمیشود
بررسی کنید:
- فایل در پوشه Workspace باشد.
- نام آن دقیقاً
.envباشد. python-dotenvنصب باشد.load_dotenv()اجرا شود.- Debug Configuration از
envFileدرست استفاده کند.
بررسی بدون نمایش کلید:
python -c \
"from dotenv import load_dotenv; import os; load_dotenv(); print(bool(os.getenv('DARVAREH_API_KEY')))"
Git تغییرات را نمایش نمیدهد
بررسی:
git status
اگر مخزن ساخته نشده است:
git init
مطمئن شوید پوشه درست در VS Code باز شده است.
VS Code کند شده است
موارد زیر را بررسی کنید:
- تعداد Extensionهای فعال
- فایلهای بسیار بزرگ
- پوشههایی مانند
node_modules - جستوجو در Dataset یا Build Output
- مصرف Extension Host
- تعداد Workspaceهای باز
- Language Serverها
فرمان عیبیابی:
Developer: Show Running Extensions
برای مقایسه، VS Code را بدون Extension اجرا کنید:
code --disable-extensions
اگر سرعت بهتر شد، Extensionها را مرحلهای فعال کنید تا عامل کندی مشخص شود.
بهینهسازی VS Code برای پروژههای بزرگ
پوشههای غیرضروری را از Watch و Search خارج کنید:
{
"files.watcherExclude": {
"**/.git/objects/**": true,
"**/.venv/**": true,
"**/node_modules/**": true,
"**/dist/**": true,
"**/build/**": true
},
"search.exclude": {
"**/.venv": true,
"**/node_modules": true,
"**/dist": true,
"**/build": true
}
}
فایلهای پروژه را بدون دلیل از Explorer مخفی نکنید؛ زیرا ممکن است فراموش شوند یا تغییرات مهم دیده نشوند.
اشتباهات رایج کاربران مبتدی
نصب تعداد زیادی Extension
فقط Extensionهای لازم را نصب کنید. چند Extension مشابه برای Formatter، Linter یا Agent ممکن است باعث تداخل شوند.
نگهداری API Key در settings.json
Workspace Settings ممکن است وارد Git شوند. کلید API را داخل .vscode/settings.json قرار ندهید.
اعتماد خودکار به Workspace ناشناس
Task، Debug Configuration و Scriptهای پروژه را قبل از اجرا بررسی کنید.
انتخابنکردن Interpreter
بسیاری از خطاهای Python در VS Code از انتخاب Interpreter اشتباه ناشی میشوند.
بررسینکردن Diff قبل از Commit
رابط گرافیکی Git کار را آسان میکند، اما مسئولیت بررسی تغییرات همچنان بر عهده توسعهدهنده است.
استفاده از Agent بدون Commit اولیه
قبل از واگذاری تغییرات گسترده به ابزار هوش مصنوعی، وضعیت فعلی پروژه را Commit کنید تا مقایسه و بازگشت آسانتر شود.
قرار دادن .venv در Git
Virtual Environment را Commit نکنید. فقط فایل وابستگی مانند requirements.txt را نگه دارید.
ذخیره نکردن تنظیمات مشترک پروژه
تنظیمات عمومی مانند تست، Formatter و Extensionهای پیشنهادی را میتوان داخل .vscode ثبت کرد تا محیط اعضای تیم هماهنگتر شود.
چکلیست تنظیم VS Code برای Python
- VS Code نصب شده است.
- Python نصب شده است.
- پوشه پروژه باز شده است.
- Extension پایتون نصب است.
- Pylance نصب است.
- Python Debugger نصب است.
.venvساخته شده است.- Interpreter درست انتخاب شده است.
- وابستگیها نصب شدهاند.
.envداخل.gitignoreاست.- Workspace Settings ساخته شده است.
- Debug Configuration کار میکند.
- تستها شناسایی میشوند.
- REST Client درخواست را ارسال میکند.
- Git تغییرات را نمایش میدهد.
- Secret داخل فایل Commitشده نیست.
پرسشهای متداول
VS Code چیست؟
VS Code یک ویرایشگر کد رایگان و توسعهپذیر برای Windows، macOS و Linux است که از زبانها، Debuggerها، Git، Terminal و Extensionهای مختلف پشتیبانی میکند.
آیا VS Code رایگان است؟
نسخه اصلی Visual Studio Code رایگان است. بعضی Extensionها یا سرویسهای متصل ممکن است شرایط یا پلن جداگانه داشته باشند.
آیا VS Code برای Python مناسب است؟
بله. با نصب Python Extension، Pylance و Python Debugger میتوانید کدنویسی، اجرا، تست و Debug پروژههای Python را در VS Code انجام دهید.
آیا VS Code یک IDE است؟
VS Code در اصل Code Editor است، اما با نصب Extensionها میتواند بسیاری از قابلیتهای یک IDE را ارائه کند.
آیا VS Code برای برنامهنویسی هوش مصنوعی مناسب است؟
بله. میتوانید Python، Jupyter، Git، Docker، API Client و ابزارهای Agentic Coding را در آن استفاده کنید. VS Code برای توسعه APIها و برنامههای متصل به مدلهای هوش مصنوعی نیز مناسب است.
تفاوت Extension و Profile چیست؟
Extension قابلیت جدید اضافه میکند. Profile مجموعهای از Extensionها، Settings، میانبرها و تنظیمات رابط را نگه میدارد.
چگونه Terminal را در VS Code باز کنیم؟
در بیشتر Keymapها:
Ctrl + `
یا از منوی زیر:
Terminal > New Terminal
چگونه پروژه را از Terminal در VS Code باز کنیم؟
code .
چگونه Python Interpreter را تغییر دهیم؟
Command Palette را باز و این فرمان را اجرا کنید:
Python: Select Interpreter
چگونه برنامه را Debug کنیم؟
یک Breakpoint بسازید، وارد Run and Debug شوید، Configuration را انتخاب و F5 را بزنید.
آیا میتوان API را داخل VS Code تست کرد؟
بله. میتوانید از Terminal و curl، فایلهای .http با REST Client یا ابزارهای API Testing دیگر استفاده کنید.
آیا میتوان Git را بدون Terminal در VS Code استفاده کرد؟
بله. Source Control رابط گرافیکی برای Stage، Commit، Branch، Sync و حل Conflict فراهم میکند. بااینحال، آشنایی با فرمانهای پایه Git همچنان مفید است.
آیا میتوان درواره را به ابزارهای هوش مصنوعی VS Code متصل کرد؟
اگر ابزار از API سازگار با OpenAI و Base URL سفارشی پشتیبانی کند، میتوانید این آدرس را تنظیم کنید:
https://api.darvareh.ir/v1
سپس API Key و شناسه مدل درواره را وارد کنید. تنظیمات دقیق هر Extension متفاوت است.
چگونه مدل مناسب را انتخاب کنیم؟
نوع کاربرد، کیفیت، سرعت، Context Window و هزینه را در نظر بگیرید. فهرست مدلها و قیمتهای جاری در صفحه مدلهای درواره قرار دارد.
جمعبندی
VS Code محیطی سبک، قابل توسعه و چندسکویی برای برنامهنویسی است. با نصب Extensionهای مناسب میتوانید کدنویسی، Git، Debug، Testing، Terminal و ابزارهای هوش مصنوعی را در یک محیط مدیریت کنید.
در این آموزش یاد گرفتیم:
- VS Code چیست.
- چه تفاوتی با Visual Studio دارد.
- چگونه رابط و Command Palette را استفاده کنیم.
- Extension نصب کنیم.
- Python Interpreter و Virtual Environment را تنظیم کنیم.
- Terminal داخلی را به کار ببریم.
- پروژه را Debug کنیم.
- تستها را داخل VS Code اجرا کنیم.
- با REST Client درخواست API بفرستیم.
- Git و Diff را مدیریت کنیم.
- تنظیمات Workspace بسازیم.
- یک API خلاصهساز هوش مصنوعی ایجاد کنیم.
پروژه عملی مقاله از طریق Base URL زیر به API درواره متصل شد:
https://api.darvareh.ir/v1
برای ساخت پروژه خود در درواره ثبتنام کنید، API Key بسازید و شناسه مدل موردنظر را از فهرست مدلهای درواره انتخاب کنید.
منابع تکمیلی
- شروع کار با Visual Studio Code
- آشنایی با رابط VS Code
- آموزش Python در VS Code
- مدیریت محیطهای Python
- Debugging در Visual Studio Code
- Debug پروژه Python در VS Code
- تست Python در VS Code
- Source Control و Git در VS Code
- مدیریت Profileهای VS Code
- REST Client در Visual Studio Marketplace
مقالات مرتبط
- ساخت افزونه VS Code با هوش مصنوعی و TypeScript
- آموزش جامع Cline و اتصال به درواره در VS Code
- آموزش اتصال Cline به API درواره
- آموزش اتصال Roo Code به API درواره
- آموزش GitHub Copilot در VS Code، CLI و Agent Mode
- آموزش هوش مصنوعی با Python و API درواره
- رفع خطا و Debug کد با هوش مصنوعی
- تولید Unit Test و تست نرمافزار با هوش مصنوعی
- بررسی کد و Pull Request با هوش مصنوعی
- ساخت AI Agent با Python، FastAPI و درواره
برای مطالعه شرایط استفاده و محدودیتهای مسئولیت، صفحه «سلب مسئولیت» را مشاهده کنید.