Wednesday

18-06-2025 Vol 19

I created a code search too made in Flask.

Membangun Mesin Pencari Kode Sendiri dengan Flask: Panduan Lengkap

Pernahkah Anda merasa frustrasi karena kesulitan menemukan cuplikan kode tertentu di antara tumpukan proyek Anda? Sebagai seorang pengembang, kita sering kali berhadapan dengan lautan kode, dan menemukan jarum dalam jerami bisa menjadi mimpi buruk. Itulah sebabnya saya memutuskan untuk membuat solusi sendiri: mesin pencari kode yang dibangun dengan Flask, sebuah framework web Python yang ringan dan fleksibel. Dalam postingan blog ini, saya akan membagikan perjalanan saya dalam membangun alat ini, mulai dari konsep awal hingga implementasi akhir, dan bagaimana Anda juga dapat membuatnya!

Mengapa Membangun Mesin Pencari Kode Sendiri?

Sebelum kita membahas detail teknisnya, mari kita bahas mengapa Anda mungkin ingin membangun mesin pencari kode Anda sendiri. Ada banyak alasan, termasuk:

  1. Kontrol Penuh: Anda memiliki kontrol penuh atas fungsionalitas, fitur, dan tampilan mesin pencari Anda. Anda dapat menyesuaikannya agar sesuai dengan kebutuhan spesifik Anda.
  2. Privasi: Jika Anda bekerja dengan kode sensitif, Anda mungkin tidak ingin mengunggahnya ke layanan pencarian kode pihak ketiga. Mesin pencari lokal memastikan data Anda tetap aman.
  3. Kinerja: Untuk proyek-proyek besar, mesin pencari lokal dapat memberikan kinerja yang lebih baik daripada solusi berbasis cloud, terutama jika Anda memiliki koneksi internet yang lambat.
  4. Pembelajaran: Membangun mesin pencari kode adalah proyek yang bagus untuk mempelajari lebih lanjut tentang Flask, indexing, dan algoritma pencarian.
  5. Kustomisasi: Integrasikan fitur-fitur khusus, seperti pencarian berbasis semantik, atau mengindeks metadata khusus yang relevan dengan alur kerja Anda.

Kerangka Artikel: Dari Ide Hingga Implementasi

Berikut adalah kerangka yang akan kita ikuti dalam postingan ini:

  1. Persiapan Awal: Menyiapkan lingkungan pengembangan Flask dan dependensi yang diperlukan.
  2. Indexing Kode: Membangun sistem untuk mengindeks file kode Anda. Ini mencakup penjelajahan direktori, membaca file, dan membuat indeks pencarian.
  3. Backend Flask: Membuat aplikasi Flask untuk menangani permintaan pencarian dan menampilkan hasil.
  4. Antarmuka Pengguna: Merancang antarmuka pengguna yang sederhana dan intuitif untuk memasukkan kueri pencarian dan melihat hasilnya.
  5. Peningkatan Lebih Lanjut: Menjelajahi peningkatan lebih lanjut seperti penyorotan sintaks, pencarian fuzzy, dan dukungan untuk berbagai bahasa pemrograman.
  6. Penerapan dan Penggunaan: Cara mengimplementasikan mesin pencari kode dan menggunakannya secara efektif.

1. Persiapan Awal: Menyiapkan Lingkungan Pengembangan

Langkah pertama adalah menyiapkan lingkungan pengembangan Anda. Anda memerlukan Python (versi 3.6 atau lebih tinggi) dan pip (package installer for Python) yang terinstal.

  1. Buat Direktori Proyek:

    Buat direktori baru untuk proyek Anda dan arahkan ke sana menggunakan terminal:

    mkdir code_search
    cd code_search
  2. Buat Lingkungan Virtual:

    Disarankan untuk menggunakan lingkungan virtual untuk mengisolasi dependensi proyek Anda.

    python3 -m venv venv
    source venv/bin/activate  # On Linux/macOS
    venv\Scripts\activate  # On Windows
  3. Instal Flask:

    Instal Flask dan dependensi yang diperlukan menggunakan pip:

    pip install Flask whoosh

    Whoosh adalah library indexing dan pencarian teks murni Python yang akan kita gunakan untuk mengindeks kode kita.

2. Indexing Kode: Membangun Sistem Indexing

Bagian penting dari mesin pencari kode adalah kemampuan untuk mengindeks file kode Anda. Ini melibatkan penjelajahan direktori, membaca file, dan membuat indeks pencarian.

2.1. Menjelajahi Direktori

Kita akan menggunakan modul os untuk menjelajahi direktori dan subdirektori.

import os

def traverse_directory(root_dir):
    file_paths = []
    for root, _, files in os.walk(root_dir):
        for file in files:
            file_path = os.path.join(root, file)
            file_paths.append(file_path)
    return file_paths

Fungsi ini menggunakan os.walk untuk berjalan melalui direktori yang diberikan dan mengumpulkan jalur file dari semua file di direktori tersebut dan subdirektorinya.

2.2. Membaca File

Selanjutnya, kita perlu membaca isi dari setiap file.

def read_file(file_path):
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            return f.read()
    except Exception as e:
        print(f"Error reading {file_path}: {e}")
        return ""

Fungsi ini mencoba membaca file menggunakan encoding UTF-8. Penanganan kesalahan disertakan untuk menangani file yang tidak dapat dibaca.

2.3. Membuat Skema Whoosh

Whoosh membutuhkan skema untuk menentukan bidang yang akan diindeks. Kita akan memiliki dua bidang: path (jalur file) dan content (isi file).

from whoosh.fields import Schema, TEXT, ID
from whoosh.index import create_in, open_dir

schema = Schema(path=ID(stored=True), content=TEXT)
  • ID: Bidang path adalah bidang ID yang menyimpan jalur file dan dapat digunakan untuk secara unik mengidentifikasi setiap dokumen.
  • TEXT: Bidang content adalah bidang TEXT yang menyimpan isi file dan akan diindeks untuk pencarian.

2.4. Membuat dan Mengisi Indeks

Sekarang kita akan membuat direktori indeks dan mengisinya dengan data dari file kode kita.

import os
from whoosh.fields import Schema, TEXT, ID
from whoosh.index import create_in, open_dir

def create_index(root_dir, index_dir="indexdir"):
    if not os.path.exists(index_dir):
        os.mkdir(index_dir)

    schema = Schema(path=ID(stored=True), content=TEXT)
    ix = create_in(index_dir, schema)
    writer = ix.writer()

    file_paths = traverse_directory(root_dir)

    for file_path in file_paths:
        content = read_file(file_path)
        writer.add_document(path=file_path, content=content)

    writer.commit()
    return ix

Fungsi ini melakukan langkah-langkah berikut:

  1. Memeriksa apakah direktori indeks sudah ada dan membuatnya jika tidak.
  2. Membuat objek skema.
  3. Membuat objek indeks menggunakan skema.
  4. Membuat objek penulis untuk menambahkan dokumen ke indeks.
  5. Berjalan melalui setiap jalur file.
  6. Membaca isi file.
  7. Menambahkan dokumen ke indeks yang berisi jalur file dan isinya.
  8. Melakukan perubahan pada indeks.

3. Backend Flask: Membuat Aplikasi Flask

Sekarang kita akan membuat aplikasi Flask untuk menangani permintaan pencarian dan menampilkan hasilnya.

3.1. Menyiapkan Aplikasi Flask

Buat file bernama app.py dan tambahkan kode berikut:

from flask import Flask, request, render_template
import os
from whoosh.index import open_dir
from whoosh.qparser import QueryParser

app = Flask(__name__)
INDEX_DIR = "indexdir"  # Direktori tempat indeks disimpan

@app.route("/", methods=['GET', 'POST'])
def search():
    results = []
    if request.method == 'POST':
        query = request.form['query']
        results = perform_search(query)
    return render_template('index.html', results=results)

def perform_search(query_string):
    ix = open_dir(INDEX_DIR)
    with ix.searcher() as searcher:
        query = QueryParser("content", ix.schema).parse(query_string)
        results = searcher.search(query, limit=10)  # Batasi jumlah hasil
        return [dict(path=r['path'], content=r.highlights("content")) for r in results]

if __name__ == '__main__':
    if not os.path.exists(INDEX_DIR):
        print("Indeks tidak ditemukan. Membuat indeks...")
        from your_indexing_script import create_index  # Ganti dengan skrip indexing Anda
        create_index("path/to/your/code")  # Ganti dengan direktori kode Anda
    app.run(debug=True)

Kode ini melakukan hal berikut:

  1. Mengimpor kelas dan modul yang diperlukan.
  2. Membuat instance aplikasi Flask.
  3. Menentukan rute untuk halaman beranda yang menangani permintaan GET dan POST.
  4. Mendefinisikan fungsi perform_search untuk menjalankan pencarian menggunakan Whoosh.
  5. Memulai aplikasi Flask.
  6. Memeriksa apakah direktori indeks ada. Jika tidak, indeks tersebut dibuat.

3.2. Membuat Fungsi Pencarian

Fungsi perform_search membuka indeks, membuat parser kueri, mengurai kueri pencarian, dan menjalankan pencarian. Fungsi ini mengembalikan daftar hasil pencarian yang berisi jalur file dan cuplikan teks yang disorot.

3.3. Membuat Template HTML

Buat direktori bernama templates dan buat file bernama index.html di dalamnya. Tambahkan kode berikut ke index.html:




    Pencarian Kode


    

Pencarian Kode

Hasil

    {% for result in results %}
  • {{ result.path }}

    {{ result.content | safe }}

  • {% endfor %}

Template ini menampilkan formulir pencarian dan hasil pencarian. Hasil pencarian ditampilkan sebagai daftar tautan yang menunjuk ke file yang cocok, bersama dengan cuplikan teks yang disorot.

4. Antarmuka Pengguna: Merancang Antarmuka Pencarian

Antarmuka pengguna untuk mesin pencari kode harus sederhana dan intuitif. Kita akan menggunakan HTML dan CSS dasar untuk merancang antarmuka.

4.1. HTML untuk Formulir Pencarian

Formulir pencarian terdiri dari bidang input teks dan tombol submit.

4.2. Menampilkan Hasil Pencarian

Hasil pencarian ditampilkan sebagai daftar tautan yang menunjuk ke file yang cocok, bersama dengan cuplikan teks yang disorot.

    {% for result in results %}
  • {{ result.path }}

    {{ result.content | safe }}

  • {% endfor %}

4.3. Menambahkan Gaya (Opsional)

Anda dapat menambahkan beberapa CSS dasar untuk menata antarmuka agar lebih menarik secara visual.

5. Peningkatan Lebih Lanjut: Menjelajahi Fitur Tambahan

Setelah Anda memiliki mesin pencari kode dasar yang berfungsi, Anda dapat menjelajahi peningkatan lebih lanjut seperti penyorotan sintaks, pencarian fuzzy, dan dukungan untuk berbagai bahasa pemrograman.

5.1. Penyorotan Sintaks

Penyorotan sintaks dapat membuat hasil pencarian lebih mudah dibaca dan dipahami. Anda dapat menggunakan library seperti Pygments untuk menambahkan penyorotan sintaks ke kode Anda.

Instal Pygments:

pip install pygments

Integrasikan dengan Flask:

from pygments import highlight
from pygments.lexers import get_lexer_for_filename, TextLexer
from pygments.formatters import HtmlFormatter

def highlight_code(code, filename):
    try:
        lexer = get_lexer_for_filename(filename, stripall=True)
    except:
        lexer = TextLexer()
    formatter = HtmlFormatter(linenos='inline', cssclass='source')
    return highlight(code, lexer, formatter)

Anda kemudian perlu memperbarui fungsi perform_search untuk menggunakan fungsi highlight_code:

def perform_search(query_string):
    ix = open_dir(INDEX_DIR)
    with ix.searcher() as searcher:
        query = QueryParser("content", ix.schema).parse(query_string)
        results = searcher.search(query, limit=10)
        return [dict(path=r['path'],
                     content=highlight_code(r['content'], r['path'])) for r in results]

Terakhir, tambahkan gaya CSS untuk penyorotan sintaks di template HTML Anda:



5.2. Pencarian Fuzzy

Pencarian fuzzy memungkinkan Anda menemukan hasil yang cocok bahkan jika kueri pencarian tidak sama persis dengan teks dalam kode. Anda dapat menggunakan fitur pencarian fuzzy Whoosh untuk mengimplementasikan fungsionalitas ini.

from whoosh.qparser import FuzzyTermPlugin

def perform_search(query_string):
    ix = open_dir(INDEX_DIR)
    with ix.searcher() as searcher:
        parser = QueryParser("content", ix.schema)
        parser.add_plugin(FuzzyTermPlugin())  # Tambahkan dukungan fuzzy
        query = parser.parse(query_string)
        results = searcher.search(query, limit=10)
        return [dict(path=r['path'], content=r.highlights("content")) for r in results]

5.3. Dukungan untuk Berbagai Bahasa Pemrograman

Untuk mendukung berbagai bahasa pemrograman, Anda perlu menyesuaikan proses indexing dan penyorotan sintaks. Anda dapat menggunakan library seperti Pygments untuk mendeteksi bahasa pemrograman file dan menerapkan penyorotan sintaks yang sesuai.

5.4. Mengindeks Metadata

Pertimbangkan untuk mengindeks metadata seperti penulis, tanggal modifikasi, atau jenis file. Ini memungkinkan pencarian yang lebih kompleks dan relevan. Modifikasi skema Whoosh Anda untuk menyertakan bidang-bidang ini dan sesuaikan proses pengindeksan Anda untuk mengisi bidang-bidang ini dengan data yang relevan.

6. Penerapan dan Penggunaan: Memulai

6.1. Menjalankan Aplikasi

Untuk menjalankan aplikasi Flask, simpan file app.py dan index.html di direktori yang sama dan jalankan perintah berikut di terminal Anda:

python app.py

Ini akan memulai server pengembangan Flask. Anda kemudian dapat mengakses aplikasi di browser web Anda di http://127.0.0.1:5000.

6.2. Menggunakan Mesin Pencari Kode

Untuk menggunakan mesin pencari kode, cukup masukkan kueri pencarian Anda di formulir pencarian dan klik tombol “Cari”. Hasil pencarian akan ditampilkan di bawah formulir pencarian. Anda dapat mengklik tautan file untuk membuka file yang cocok di editor kode Anda.

6.3. Tips Penggunaan

  1. Indeks Secara Teratur: Pastikan untuk mengindeks ulang kode Anda setelah membuat perubahan untuk memastikan hasil pencarian Anda akurat.
  2. Kueri Efektif: Gunakan istilah pencarian yang spesifik untuk mempersempit hasil Anda.
  3. Eksplorasi Fuzzy: Manfaatkan pencarian fuzzy untuk menemukan kecocokan bahkan dengan salah ketik kecil.

Kesimpulan

Membangun mesin pencari kode dengan Flask adalah proyek yang bermanfaat yang dapat membantu Anda meningkatkan produktivitas dan menyederhanakan alur kerja Anda. Dengan mengikuti langkah-langkah yang diuraikan dalam postingan blog ini, Anda dapat membuat mesin pencari kode yang disesuaikan dengan kebutuhan spesifik Anda. Jangan takut untuk bereksperimen dengan fitur dan peningkatan lebih lanjut untuk membuat alat yang benar-benar unik dan berharga.

Saya harap panduan ini bermanfaat. Selamat coding!

“`

omcoding

Leave a Reply

Your email address will not be published. Required fields are marked *