VSCode တွင် Python Code Formatting စမ်းသပ်ခြင်း

Auto-formatters for Python

Python Code Formatter tool တွေအကြောင်း (Black , Ruff, etc) ဖတ်ဖူးတာ ကြာပီဆိုပေမယ့် vscode မှာ setup မလုပ်ဖြစ်ဘူး။ ဒီမနက် အစောကြီး နိုးနေတာနဲ့ computer ရှေ့ ထိုင်ရင်း လျှောက်စမ်းရင်း တော်တော်ကြာသွားတယ်။ အကြောင်းရင်းက vscode မှာ သွင်းထားမိတဲ့ pylance က အနီရဲရဲ error message တွေကို ကြာလာတော့ မြင်ရတာအဆင်မပြေတာကြောင့် ရယ် ၊ နောက်ပီး ကျောင်း project မှာ Guide ဆရာ က အဲဒီ equal sign = ရှေ့ space ဖြုတ်ဖို့ ခနခန ပြောလွန်းတာရယ်ကြောင့် အဲဒါကိုလဲ code formatting ထဲမှာ ရှိမှာပဲ ဆိုတာကနေ စလုပ်မိတာ။ (Assignment မပြခင် Code Formatting လုပ်လိုက်လေ လို့ စ အကြံဥာဏ်ပေးလိုက်တဲ့ Putuuu lay ကိုလဲ ဒီနေရာက credit ပေးပါတယ် 😀 )

Installation

pip install နဲ့ပဲ လွယ်လွယ်ကူကူသွင်းလို့ ရတယ်။ ဒါပေမယ့် အမှန်က မလိုလောက်ဘူး ။ VScode extension ကနေ Black formatter (or) Ruff ရှာသွင်းရင် အဲဒီ description မှာ extension နဲ့ အတူ သွင်းပေးထားတဲ့ version တစ်ခု ပါတယ်လို့ ဆိုထားတယ်။ ဒါပေမယ့် ကျွန်တော်က command line (vscode မဟုတ်တဲ့ အခြားအပြင်ဘက်နေရာတွေမှာပါ) လျှောက်စမ်းချင်တာနဲ့ pip install black (or) pip install ruff နဲ့ သွင်းလိုက်တယ်။

Black Formatter

ဒီကောင်က နာမည်ကြီးတာရော ၊ နောက်ပြီး vscode ထဲမှာ miscrosoft ရဲ့ official extenstion အနေနဲ့ ရှိနေတာရောကြောင့် အရင် စမ်းဖြစ်လိုက်တာ။ vscode ရဲ့ setting.json ထဲမှာ နဲနဲသွားပြင်ရုံပါပဲ။ (vscode setting.json ထဲသွားရန် >> Command Palette > Open User Setting (JSON)) ။ အဲဒီ json အတွင်းထဲမှာ extension description မှာ ပြောထားတဲ့ setting တွေ ထည့်ရုံပါပဲ။

"editor.defaultFormatter": "ms-python.black-formatter",
"editor.formatOnSave": true

Black Formatter မှာက အခြား custom setting တွေ လုပ်လို့ရတယ် ပြောပေမယ့် ကိုယ်ပဲ အရမ်းနားမလည်လို့လား မသိဘူး ။ ရှာမတွေ့ / မလုပ်တတ်ဘူး။ Documentation ကလဲ Ruff နဲ့ ယှဥ်မယ် ဆိုရင် သိပ်မပြည့်စုံဘူး။

Ruff

သူကတော့ microsoft က ထုတ်တာမဟုတ်ပေမယ့် Rust Programming Language နဲ့ ရေးထားလို့ အတော်မြန်တယ်လို့တော့ ကြားဖူးထားပြီးသား။ documentation တော့ တော်တော်ပြည့်စုံတယ် ပြောရမယ်။ Black ကနေ Ruff ကို ပြောင်းဖြစ်သွားတာက အခု ကျွန်တော်လိုချင်တဲ့ Removing White space code formatting ဆိုပြီး google မှာ ရှာတော့ Ruff မှာ custom ထည့်လို့ ရတဲ့ Rules တွေအကြောင်း သွားတွေ့တာ။ အဲဒီမှာ ကျွန်တော်လိုချင်နေတာက E251 ဆိုတဲ့ rule။ ဒါပေမယ့် Ruff documentation ထဲမှာ ရေးထားသလို အဲဒီ rule က Preview အနေနဲ့ပဲ ဖြစ်နေတယ်။ အဲဒီတော့ သူတို့ လမ်းညွှန်ထားသလို –

  • Root Folder အောက်မှာ pyproject.toml ဆိုတဲ့ file တစ်ခု အသစ်ဆောက်လိုက်တယ်။
  • အဲဒီ file ထဲမှာ အောက်က အတိုင်း ရေးထည့်ရတယ်။
[tool.ruff]
line-length = 100
[tool.ruff.lint]
preview = true
extend-select = ["E251"]

extend-select list ထဲမှာ ကိုယ် လိုချင်တဲ့ rule တွေ ထည့်ပေါ့ ။ Rule တွေ သီးသန့် ဖြစ်ချင်တယ် ဆိုရင် နောက်တကြောင်း ထပ်ထည့်လို့ ရတယ်။

explicit-preview-rules = true

အပြည့်အစုံက Ruff ရဲ့ Preview section အောက်မှာ သွားဖတ်လို့ ရတယ်။

ကိုယ် စမ်းသပ်ချင်တဲ့ code file ရဲ့ formatting ကို command line ကနေ လဲ လှမ်းစမ်းလို့ ရတယ်

ruff check **filename_that_you_want_to_test.py

Ruff ကို default code formatter အနေနဲ့ သုံးဖို့ ဆိုရင် Black တုန်းကလိုပဲ VScode ရဲ့ setting.json ထဲမှာ သွားပြင်ပေးဖို့လိုတယ်။

"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true

FormatOnSave ကတော့ ကျွန်တော်က file ကို save လုပ်တာနဲ့ auto format လုပ်ပေးသွားတာက သဘောကျလို့ true လုပ်ထားတာ။ အကယ်၍ ကိုယ်က မလိုချင်ဘူးဆိုရင်တော့ အဲဒါကို ဖြုတ်ပြီး Manual လုပ်လဲ ရတယ်။

Autopep8

ဒီအတိုင်း vscode extension ထဲမှာ တွေ့လို့ install လုပ်ပီး စမ်းမိတာ ။ အပေါ်က ၂ ခုလောက်တောင် သိပ်အဆင်မပြေပါဘူး။

Decision

လောလောဆယ်အနေနဲ့ Ruff ကိုပဲ ဆက်သုံးဖြစ်မယ် ထင်တယ်။ custom rules တွေ လွယ်လွယ် စိတ်ကြိုက်ထည့်လို့ရတာရယ် ၊ တစ်ခုခု ဆိုရင် documentation သွားဖတ်ရုံနဲ့ အဖြေရတာရယ်ကြောင့် အဓိက ရွေးဖြစ်တာ။ Black မှာလဲ သူ့အားသာချက်တွေတော့ ရှိနိုင်ပါတယ်။

မလွတ်မြောက်ခြင်း မှတ်တမ်း (အောက်တိုဘာ ၁၀၊၂၀၂၃)

အလုပ်တစ်ခု ရှိတော့ မနက်စောစောထပြီး အလုပ်လုပ်ဖြစ်တယ်။ Youtube မှာ သီချင်းဖွင့်ထားရာကနေ အစ္စရေး-ပါလက်စတိုင်း စစ်ပွဲသတင်းတွေ တက်လာလို့ နားထောင်ဖြစ်သွားတာ။ စစ်ပွဲတွေရဲ့ အစ-အဆုံးက ဘာလဲ။ စစ်ပွဲတွေမှာ တရားသောစစ် ဆိုတာ ရှိသလား။ သေဆုံးသွားကြသူတွေ (စစ်သားတွေပဲ ဖြစ်ဖြစ် ၊ အရပ်သားတွေပဲ ဖြစ်ဖြစ်) – တရားသော နည်းဖြင့် သေဆုံးခြင်း မှ မဟုတ်တာ။ ဒီ အပေါ်စာတပိုဒ် မဆုံးခင်မှာပဲ ဒီ မနက်

Read More »
Buddha Scratch
Fuck the Coup!
admin

မလွတ်မြောက်ခြင်း မှတ်တမ်း (စက်တင်ဘာ ၂၀၊၂၀၂၃)

စိတ်ထဲမှာ တစ်စုံတစ်ရာ ကြောက်ရွံ့ခြင်းကို ခံစားနေရတယ်။ Eminem ရဲ့ Not Afraid သီချင်းကို ဖွင့်ထားတယ်။ မနေ့က mechanical keyboard မွေးနေ့ လက်ဆောင်ရတယ်။ Code ရေးတဲ့ အရည်အသွေးများ ပိုတိုးတက်လာမလားပဲ။ အခုထိ Design Patterns တွေကို နားမလည်သေးဘူး။ နားမလည်ခြင်းရဲ့ အကြောင်းအရင်းက အလေ့အကျင့် (ချရေးကြည့်နေတာ) မဟုတ်လို့ ထင်တာပဲ။ အလုပ် ပရောဂျက်တွေထဲမှာ ထည့်သုံးမယ် လို့ စဥ်းစားပေမယ့်လဲ

Read More »

ဗီယက်နမ် ခရီးမှတ်တမ်း – ၂

August 20,2023 ၉ နာရီ လေယာဥ်ကို ၆နာရီခွဲဝန်းကျင်လောက် လေဆိပ်အရောက်သွားတယ်။ အဲဒီမှာ လူအုပ်ကြီးကို ကြည့်ပြီး ဝရုန်းသုန်းကား စဖြစ်တော့တာပဲ။ ၂ ယောက်ပေါင်းရင် kg 40 ကျော်ရပေမယ့် Luggage တစ်ခုတည်းက 32kg ကျော်နေလို့ ticket counter က စရစ်တယ်။ SGD 60 လောက် အပိုထပ်ပေးပီး kg ဝယ်လိုက်ရတယ်။ luggage တွေ ပစ္စည်းတင်တဲ့ ပတ်လမ်းကြောင်းပေါ်

Read More »

မလွတ်မြောက်ခြင်းမှတ်တမ်းများ (သြဂုတ် ၂၉၊၂၀၂၃)

စင်္ကာပူ စံတော်ချိန် မနက် ၂ နာရီခွဲနေပြီ။ အိပ်မပျော်ဘူး။ ကလေးဘဝက တတ်ခဲ့တဲ့ ဘုန်းတော်ကြီးသင်ကျောင်းက ဓါတ်ပုံတွေ ၊ video တွေ ပြန်ကြည့်နေမိတာ။ ဒီနေ့ ကိုယ် ရယ်လို့ ဖြစ်လာတာတွေက အဲဒီငယ်ဘဝ ဖြတ်သန်းမှုတွေကြောင့်မလား။ ဒါပေမယ့် အဲဒါက ကျေးဇူးတရားလား။ အကယ်ရွေ့ ကျေးဇူးတရားဆိုရင်ရော ပြောတိုင်းလက်ခံရတဲ့ပုံသွင်းမှုမျိုးကို ကျေးဇူးတင်သင့်လား။ ဘုန်းကြီးကျောင်းသားဘဝ ကို ပြန်စဥ်းစားမိရင် ပထမဆုံး ဝင်ခွင့်စာမေးပွဲဖြေဖို့ မြို့ကို စရောက်တဲ့အချိန်ကို သတိရတယ်။

Read More »