From fadaf4889407325260608b226938f99e29c94f19 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Tue, 17 Jun 2025 20:57:55 +0100 Subject: [PATCH 1/4] Added tests for autocomplete, which expose an issue with default parameters in methods. --- .../completer_params/params_module_example_3.py | 13 +++++++++++++ .../completer_params/params_module_example_4.py | 11 +++++++++++ .../completer_params/params_module_example_5.py | 12 ++++++++++++ tpParser/shared/src/test/scala/TestCompleter.scala | 5 ++++- 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 tpParser/shared/src/test/programs/completer_params/params_module_example_3.py create mode 100644 tpParser/shared/src/test/programs/completer_params/params_module_example_4.py create mode 100644 tpParser/shared/src/test/programs/completer_params/params_module_example_5.py diff --git a/tpParser/shared/src/test/programs/completer_params/params_module_example_3.py b/tpParser/shared/src/test/programs/completer_params/params_module_example_3.py new file mode 100644 index 0000000..eb1c9b4 --- /dev/null +++ b/tpParser/shared/src/test/programs/completer_params/params_module_example_3.py @@ -0,0 +1,13 @@ +# parent3.child3.shape3 +# class Shape: +# pos_x +# pos_y +# __init__(self, x, y) +# draw(self) +# extent(self) +# rotate_by(self, degrees = 90) +# [Shape]make_shape() +# 49 +# degrees=90 +from parent3.child3.shape3 import * +make_shape().rotate_by() diff --git a/tpParser/shared/src/test/programs/completer_params/params_module_example_4.py b/tpParser/shared/src/test/programs/completer_params/params_module_example_4.py new file mode 100644 index 0000000..a9a1a83 --- /dev/null +++ b/tpParser/shared/src/test/programs/completer_params/params_module_example_4.py @@ -0,0 +1,11 @@ +# pyi:parent4.child4.shapeparams4 +# class Shape: +# def __init__(self, x, y) -> None: ... +# def draw(self) -> None: ... +# def extent(self) -> int: ... +# def rotate_by(self, units:str, degrees: float = 90) -> Shape: ... +# def make_shape() -> Shape: ... +# 55 +# units +from parent4.child4.shapeparams4 import * +make_shape().rotate_by() diff --git a/tpParser/shared/src/test/programs/completer_params/params_module_example_5.py b/tpParser/shared/src/test/programs/completer_params/params_module_example_5.py new file mode 100644 index 0000000..9b19d55 --- /dev/null +++ b/tpParser/shared/src/test/programs/completer_params/params_module_example_5.py @@ -0,0 +1,12 @@ +# pyi:parent5.child5.shapeparams5 +# class Shape: +# def __init__(self, x, y:float=...) -> None: ... +# def draw(self) -> None: ... +# def extent(self) -> int: ... +# def rotate_by(self, degrees: float = 90) -> Shape: ... +# def make_shape() -> Shape: ... +# def make_shape_at(x, y: int = ..., z:int = ...) -> None: ... +# 42 +# x +from parent5.child5.shapeparams5 import * +make_shape_at() diff --git a/tpParser/shared/src/test/scala/TestCompleter.scala b/tpParser/shared/src/test/scala/TestCompleter.scala index 19a3521..15c4745 100644 --- a/tpParser/shared/src/test/scala/TestCompleter.scala +++ b/tpParser/shared/src/test/scala/TestCompleter.scala @@ -34,7 +34,10 @@ class TestCompleter extends FunSuite { // some of the contents might be meaningfully indented so we can't just trim every line: val module_name = leadingComments(0).drop(1).trim val module_contents = leadingComments.slice(1, leadingComments.length - 2).map((x) => if (x.length < 2) x else x.substring(2)) - ModuleLoader.addModule(module_name, module_contents) + if (module_name.startsWith("pyi:")) + ModuleLoader.addPyiModule(module_name.substring("pyi:".length), module_contents.mkString("\n")) + else + ModuleLoader.addModule(module_name, module_contents) // Note: the module contents are not cleared between tests, so it's a good idea to name // all involved modules uniquely to avoid interference. } From ae032d12d081c2dc90b5e1b3e8d4e79a25650318 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Tue, 17 Jun 2025 20:58:17 +0100 Subject: [PATCH 2/4] Fix a bug with default parameters in methods. --- .../main/scala/tigerpython/parser/types/PythonFunction.scala | 2 +- .../main/scala/tigerpython/utilities/types/PythonFunction.scala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tpParser/shared/src/main/scala/tigerpython/parser/types/PythonFunction.scala b/tpParser/shared/src/main/scala/tigerpython/parser/types/PythonFunction.scala index 6ee1043..d853e6e 100755 --- a/tpParser/shared/src/main/scala/tigerpython/parser/types/PythonFunction.scala +++ b/tpParser/shared/src/main/scala/tigerpython/parser/types/PythonFunction.scala @@ -32,7 +32,7 @@ class PythonFunction(val name: String, override def getParamsString: String = if (isMethod && params.nonEmpty) - params.drop(1).map(_.name).take(paramCount).mkString(", ") + params.drop(1).map(_.name).take(paramCount - 1).mkString(", ") else params.map(_.name).take(paramCount).mkString(", ") diff --git a/tpParser/shared/src/main/scala/tigerpython/utilities/types/PythonFunction.scala b/tpParser/shared/src/main/scala/tigerpython/utilities/types/PythonFunction.scala index ef8e177..76d353c 100644 --- a/tpParser/shared/src/main/scala/tigerpython/utilities/types/PythonFunction.scala +++ b/tpParser/shared/src/main/scala/tigerpython/utilities/types/PythonFunction.scala @@ -25,7 +25,7 @@ class PythonFunction(val name: String, override def getParamsString: String = if (isMethod && params.nonEmpty) - params.drop(1).map(_.name).take(paramCount).mkString(", ") + params.drop(1).map(_.name).take(paramCount - 1).mkString(", ") else params.map(_.name).take(paramCount).mkString(", ") From 6d9173b85943ddc9807a975a9c190d3332274593 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Tue, 17 Jun 2025 21:05:25 +0100 Subject: [PATCH 3/4] Made a new release --- build.sbt | 2 +- package-lock.json | 2 +- package.json | 2 +- release/tigerpython-parser.js | 2 +- release/tigerpython-parser.mjs | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build.sbt b/build.sbt index 6a581d0..d717eaa 100644 --- a/build.sbt +++ b/build.sbt @@ -1,7 +1,7 @@ import sbtcrossproject.CrossPlugin.autoImport.{crossProject, CrossType} val useScalaVersion = "2.13.14" -val releaseVersion = "1.1.1" +val releaseVersion = "1.1.2" val sharedSettings = Seq( scalaVersion := useScalaVersion, diff --git a/package-lock.json b/package-lock.json index ac8877b..22edbae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "tigerpython-parser", - "version": "1.1.1", + "version": "1.1.2", "lockfileVersion": 1 } diff --git a/package.json b/package.json index 3498596..4aed660 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "tigerpython-parser", - "version": "1.1.1", + "version": "1.1.2", "description": "Enhanced error recognition in Python ", "main": "release/tigerpython-parser.mjs", "types": "tpParser/js/types/index.d.ts", diff --git a/release/tigerpython-parser.js b/release/tigerpython-parser.js index 9e7fa36..8b11cbc 100644 --- a/release/tigerpython-parser.js +++ b/release/tigerpython-parser.js @@ -1397,7 +1397,7 @@ f.m));e=1+e|0}else if(b instanceof B)for(;e"boolean"===typeof a),Ea=D(0,"java.lang.Character",{dZ:1,g:1,Kj:1,Nn:1},a=>a instanceof ca);function NM(a){var b=new OM;ik(b,a,!0);return b}class OM extends MJ{}D(OM,"java.lang.RuntimeException",{Rc:1,pc:1,Db:1,g:1});function PM(a){a.P="";return a}function Gj(a,b){PM(a);if(0>b)throw new Of;return a}function Hj(){this.P=null}Hj.prototype=new r;Hj.prototype.constructor=Hj;function QM(a,b){b=Qm(Mj(),b,b.a.length);a.P=""+a.P+b}Hj.prototype.j=function(){return this.P}; diff --git a/release/tigerpython-parser.mjs b/release/tigerpython-parser.mjs index 34202cb..06c6b38 100644 --- a/release/tigerpython-parser.mjs +++ b/release/tigerpython-parser.mjs @@ -52453,7 +52453,7 @@ $p.nv = (function() { throw new $c_s_MatchError(xs$2); } } - return $f_sc_IterableOnceOps__mkString__T__T__T__T($x_10.aB($m_sc_ArrayOps$().sN(ys, 0, this.H6)), "", ", ", ""); + return $f_sc_IterableOnceOps__mkString__T__T__T__T($x_10.aB($m_sc_ArrayOps$().sN(ys, 0, (((-1) + this.H6) | 0))), "", ", ", ""); } else { var $x_20 = $m_s_Predef$(); var xs$3 = this.sd; From 0caf8549e49d9332ee8c99af8fee9bc4f7b6e975 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Tue, 17 Jun 2025 21:07:33 +0100 Subject: [PATCH 4/4] Added one more test --- .../completer_params/params_module_example_6.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 tpParser/shared/src/test/programs/completer_params/params_module_example_6.py diff --git a/tpParser/shared/src/test/programs/completer_params/params_module_example_6.py b/tpParser/shared/src/test/programs/completer_params/params_module_example_6.py new file mode 100644 index 0000000..e04a286 --- /dev/null +++ b/tpParser/shared/src/test/programs/completer_params/params_module_example_6.py @@ -0,0 +1,13 @@ +# parent6.child6.shapeparams6 +# class Shape: +# pos_x +# pos_y +# __init__(self, x, y) +# draw(self) +# extent(self) +# rotate_by(self, degrees = 90) +# [Shape]make_shape() +# 55 +# +from parent6.child6.shapeparams6 import * +make_shape().extent()