Skip to content

Commit

Permalink
fix compile error
Browse files Browse the repository at this point in the history
  • Loading branch information
Nimaoth committed Dec 22, 2023
1 parent c712d2c commit 28e83a9
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 27 deletions.
47 changes: 24 additions & 23 deletions src/ast/lang/property_validator_language.nim
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import std/[tables, strformat, options, json]
import misc/[id, util, custom_logger, custom_async]
import ui/node
import ast/[model, cells, cell_builder_database, base_language]
import workspaces/[workspace]
import lang_language, cell_language

export id, ast_ids
Expand Down Expand Up @@ -31,36 +32,36 @@ scopeComputers[IdPropertyValidatorDefinition] = proc(ctx: ModelComputationContex

return nodes

var propertyValidatorLanguage*: Future[Language] = nil
proc createPropertyValidatorLanguage(): Future[Language] {.async.} =
let cellLanguage = cell_language.cellLanguage.await
proc resolveLanguage(project: Project, workspace: WorkspaceFolder, id: LanguageId): Future[Option[Language]] {.async.} =
if id == IdLangLanguage:
assert lang_language.langLanguage.isNotNil
return lang_language.langLanguage.some
if id == IdCellLanguage:
let cellLanguage = cell_language.cellLanguage.await
assert cellLanguage.isNotNil
return cellLanguage.some
if id == IdBaseInterfaces:
assert base_language.baseInterfaces.isNotNil
return base_language.baseInterfaces.some
else:
log lvlError, "createPropertyValidatorLanguage::resolveLanguage: unknown language id: ", id

proc resolveLanguage(id: LanguageId): Option[Language] =
if id == IdLangLanguage:
assert lang_language.langLanguage.isNotNil
return lang_language.langLanguage.some
if id == IdCellLanguage:
assert cellLanguage.isNotNil
return cellLanguage.some
if id == IdBaseInterfaces:
assert base_language.baseInterfaces.isNotNil
return base_language.baseInterfaces.some
else:
log lvlError, "createPropertyValidatorLanguage::resolveLanguage: unknown language id: ", id
proc resolveModel(project: Project, workspace: WorkspaceFolder, id: ModelId): Future[Option[Model]] {.async.} =
assert baseInterfacesModel.isNotNil
if id == baseInterfacesModel.id:
return baseInterfacesModel.some
if id == baseLanguageModel.id:
return baseLanguageModel.some
log lvlError, fmt"createPropertyValidatorLanguage::resolveModel: unknown model id: {id}"

proc resolveModel(project: Project, id: ModelId): Option[Model] =
assert baseInterfacesModel.isNotNil
if id == baseInterfacesModel.id:
return baseInterfacesModel.some
if id == baseLanguageModel.id:
return baseLanguageModel.some
log lvlError, fmt"createPropertyValidatorLanguage::resolveModel: unknown model id: {id}"
var propertyValidatorLanguage*: Future[Language] = nil
proc createPropertyValidatorLanguage(): Future[Language] {.async.} =

let model = newModel(IdPropertyValidatorLanguage.ModelId)
model.addLanguage(lang_language.langLanguage)

const jsonText = staticRead "../model/lang/property-validator.ast-model"
if not model.loadFromJson("model/lang/property-validator.ast-model", jsonText.parseJson, resolveLanguage, resolveModel):
if not model.loadFromJsonAsync(nil, nil, "model/lang/property-validator.ast-model", jsonText.parseJson, resolveLanguage, resolveModel).await:
log lvlError, "Failed to load property validator model"
return Language nil

Expand Down
10 changes: 8 additions & 2 deletions src/ast/model.nim
Original file line number Diff line number Diff line change
Expand Up @@ -1289,16 +1289,17 @@ proc loadFromJson*(project: Project, json: JsonNode, opt = Joptions()): bool =
proc loadFromJsonAsync*(model: Model, project: Project, workspace: WorkspaceFolder, path: string, json: JsonNode,
resolveLanguage: proc(project: Project, workspace: WorkspaceFolder, id: LanguageId): Future[Option[Language]],
resolveModel: proc(project: Project, workspace: WorkspaceFolder, id: ModelId): Future[Option[Model]],
opt = Joptions()): Future[void] {.async.} =
opt = Joptions()): Future[bool] {.async.} =
model.path = path
if json.kind != JObject:
log(lvlError, fmt"Expected JObject")
return
return false

if json.hasKey("id"):
model.id = json["id"].jsonTo ModelId
else:
log(lvlError, fmt"Missing id")
return false

if json.hasKey("languages"):
for languageIdJson in json["languages"]:
Expand All @@ -1307,6 +1308,7 @@ proc loadFromJsonAsync*(model: Model, project: Project, workspace: WorkspaceFold
model.addLanguage(language)
else:
log(lvlError, fmt"Unknown language {id}")
return false
else:
log(lvlWarn, fmt"Missing languages")

Expand All @@ -1318,16 +1320,20 @@ proc loadFromJsonAsync*(model: Model, project: Project, workspace: WorkspaceFold
model.addImport(m)
else:
log(lvlError, fmt"Unknown model {id}")
return false

if json.hasKey("rootNodes"):
for node in json["rootNodes"]:
if node.jsonToAstNode(model, opt).getSome(node):
model.addRootNode(node)
else:
log(lvlError, fmt"Failed to parse root node from json")
return false
else:
log(lvlWarn, fmt"Missing root nodes")

return true

proc loadFromJson*(model: Model, path: string, json: JsonNode,
resolveLanguage: proc(id: LanguageId): Option[Language],
resolveModel: proc(project: Project, id: ModelId): Option[Model],
Expand Down
3 changes: 1 addition & 2 deletions src/ast/model_document.nim
Original file line number Diff line number Diff line change
Expand Up @@ -572,8 +572,7 @@ proc loadModelAsync(project: Project, ws: WorkspaceFolder, path: string): Future
let json = jsonText.parseJson

var model = newModel()
await model.loadFromJsonAsync(project, ws, path, json, resolveLanguage, resolveModel)
if model.id.isNone:
if not model.loadFromJsonAsync(project, ws, path, json, resolveLanguage, resolveModel).await:
log lvlError, fmt"Failed to load model: no id"
return Model.none

Expand Down

0 comments on commit 28e83a9

Please sign in to comment.