MCPcopy Create free account
hub / github.com/deepnote/deepnote / analyze_blocks

Function analyze_blocks

packages/reactivity/src/scripts/ast-analyzer.py:245–429  ·  view source on GitHub ↗
(blocks)

Source from the content-addressed store, hash-verified

243
244
245def analyze_blocks(blocks):
246 analysis = []
247
248 for block in blocks:
249 try:
250 content = block.get("content", "")
251 loc = count_lines_of_code(content)
252
253 if block.get("type") == "code" or block.get("type") is None:
254 block_defined, block_used, block_imported, block_packages = get_defined_used_variables(
255 block
256 )
257 block_defined_list = list(block_defined)
258 block_defined_list.sort()
259 block_used_list = list(block_used)
260 block_used_list.sort()
261 block_imported_list = list(block_imported)
262 block_imported_list.sort()
263 block_packages_list = list(block_packages)
264 block_packages_list.sort()
265 analysis.append(
266 {
267 "id": block["id"],
268 "definedVariables": block_defined_list,
269 "usedVariables": block_used_list,
270 "importedModules": block_imported_list,
271 "importedPackages": block_packages_list,
272 "linesOfCode": loc,
273 }
274 )
275 elif block["type"] == "sql":
276 jinja_variables = extract_jinja_variables(block["content"])
277 jinja_variables_list = list(jinja_variables)
278 jinja_variables_list.sort()
279
280 output_variables = []
281 if (
282 "metadata" in block
283 and block["metadata"]
284 and "deepnote_variable_name" in block["metadata"]
285 ):
286 output_variables = [block["metadata"]["deepnote_variable_name"]]
287
288 analysis.append(
289 {
290 "id": block["id"],
291 "definedVariables": output_variables,
292 "usedVariables": jinja_variables_list,
293 "importedModules": [],
294 "linesOfCode": loc,
295 }
296 )
297 elif block["type"] == "button":
298 output_variables = []
299 if (
300 "metadata" in block
301 and block["metadata"]
302 and "deepnote_variable_name" in block["metadata"]

Callers 1

mainFunction · 0.85

Calls 4

count_lines_of_codeFunction · 0.85
extract_jinja_variablesFunction · 0.85

Tested by

no test coverage detected