Class: Aidp::Setup::Devcontainer::JsoncDocument

Inherits:
Object
  • Object
show all
Defined in:
lib/aidp/setup/devcontainer/jsonc_document.rb

Overview

Parses and serializes JSON with comments while preserving comment blocks.

Defined Under Namespace

Classes: ParseError, Writer

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(text) ⇒ JsoncDocument

Returns a new instance of JsoncDocument.



20
21
22
23
24
# File 'lib/aidp/setup/devcontainer/jsonc_document.rb', line 20

def initialize(text)
  @text = text
  @index = 0
  @comments = {}
end

Instance Attribute Details

#commentsObject (readonly)

Returns the value of attribute comments.



10
11
12
# File 'lib/aidp/setup/devcontainer/jsonc_document.rb', line 10

def comments
  @comments
end

#dataObject (readonly)

Returns the value of attribute data.



10
11
12
# File 'lib/aidp/setup/devcontainer/jsonc_document.rb', line 10

def data
  @data
end

Class Method Details

.dump(data, comments: {}) ⇒ Object



16
17
18
# File 'lib/aidp/setup/devcontainer/jsonc_document.rb', line 16

def self.dump(data, comments: {})
  new(nil).send(:dump, data, comments)
end

.parse(text) ⇒ Object



12
13
14
# File 'lib/aidp/setup/devcontainer/jsonc_document.rb', line 12

def self.parse(text)
  new(text).parse
end

Instance Method Details

#parseObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/aidp/setup/devcontainer/jsonc_document.rb', line 26

def parse
  root_comments = consume_comments
  store_comments([], root_comments, position: :leading) if root_comments.any?

  value = parse_value([])
  trailing_comments = consume_comments
  store_comments([], trailing_comments, position: :trailing) if trailing_comments.any?
  skip_whitespace
  raise ParseError, "Unexpected trailing content" unless eof?

  @data = value
  self
rescue ParseError => e
  raise e
rescue => e
  raise ParseError, e.message
end