nixd
Loading...
Searching...
No Matches
Utils.h
Go to the documentation of this file.
1/// \file
2/// \brief Shared utilities for code actions.
3///
4/// This header provides common functions used across multiple code action
5/// implementations, including text manipulation, Nix identifier validation,
6/// and CodeAction construction helpers.
7
8#pragma once
9
10#include <lspserver/Protocol.h>
11
12#include <llvm/ADT/StringRef.h>
13
14#include <string>
15#include <vector>
16
17namespace nixd {
18
19/// \brief Create a CodeAction with a single text edit.
20lspserver::CodeAction createSingleEditAction(const std::string &Title,
21 llvm::StringLiteral Kind,
22 const std::string &FileURI,
23 const lspserver::Range &EditRange,
24 std::string NewText);
25
26/// \brief Check if a string is a valid Nix identifier that can be unquoted.
27///
28/// Valid identifiers: start with letter or underscore, contain letters,
29/// digits, underscores, hyphens, or single quotes. Must not be a keyword.
30bool isValidNixIdentifier(const std::string &S);
31
32/// \brief Escape special characters for Nix double-quoted string literals.
33///
34/// Escapes: " \ ${ \n \r \t (per Nix Reference Manual)
35std::string escapeNixString(llvm::StringRef S);
36
37/// \brief Quote and escape a Nix attribute key if necessary.
38///
39/// Returns the key as-is if it's a valid identifier, otherwise quotes and
40/// escapes special characters using escapeNixString().
41std::string quoteNixAttrKey(const std::string &Key);
42
43/// \brief Maximum recursion depth for JSON to Nix conversion.
44constexpr size_t MaxJsonDepth = 100;
45
46/// \brief Maximum array/object width for JSON to Nix conversion.
47constexpr size_t MaxJsonWidth = 10000;
48
49} // namespace nixd
constexpr size_t MaxJsonDepth
Maximum recursion depth for JSON to Nix conversion.
Definition Utils.h:44
constexpr size_t MaxJsonWidth
Maximum array/object width for JSON to Nix conversion.
Definition Utils.h:47
bool isValidNixIdentifier(const std::string &S)
Check if a string is a valid Nix identifier that can be unquoted.
Definition Utils.cpp:27
lspserver::CodeAction createSingleEditAction(const std::string &Title, llvm::StringLiteral Kind, const std::string &FileURI, const lspserver::Range &EditRange, std::string NewText)
Create a CodeAction with a single text edit.
Definition Utils.cpp:10
std::string escapeNixString(llvm::StringRef S)
Escape special characters for Nix double-quoted string literals.
Definition Utils.cpp:52
std::string quoteNixAttrKey(const std::string &Key)
Quote and escape a Nix attribute key if necessary.
Definition Utils.cpp:89